現在構築中の GUI に問題があります。私のアプリは現在、2 つのノートブックを並べて構成されており、下にターミナル/ログ textCtrl があります。左側のノートブックにはさまざまな入力パネルと出力パネルが含まれており、右側のノートブックには 1 つ以上の matplotlib Figure が含まれています。
問題は、左側のノートブックに、垂直に積み重ねられた 3 つのパネルで構成されるページがあることです。最初の 2 つには、標準のコントロール (チェックボックス、textctrls、およびコンボボックス) があります。これらの「設定」の下には wx.grid.Grid があり、右側の mpl 図のプロットに使用されるいくつかのパラメーターの I/O が含まれています。このグリッドは非常に大きくなる可能性があるため、スクロール パネルに配置しました。Windowsではすべて正常に動作しますが、Linuxでは、y_scrollバーが表示パネルの高さよりも高いことがわかります(スクロールバーの下半分が表示されないなど)-それが理にかなっている場合.
同様の問題がある小さなコードをまとめました-スクロールバーは実際のパネルと同じ高さではありません。私は何を間違っていますか?
import wx
import wx.grid as grd
import wx.lib.scrolledpanel as scrolled
# A sample panel with some check box controls to take up space, within a
# static box sizer
class SamplePanel(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self,parent)
grid = wx.GridBagSizer()
for i in (0,1):
grid.Add(wx.StaticText(self,label="Blah Blah: "),pos=(i,0))
grid.Add(wx.CheckBox(self),pos=(i,1))
box = wx.StaticBox(self, -1, "Some Settings: ")
box_sizer = wx.StaticBoxSizer(box,wx.VERTICAL)
box_sizer.Add(grid, 0, wx.ALL)
self.SetSizer(box_sizer)
self.Layout()
# A sample "table" of some parameters, let's say
class SampleGrid(grd.Grid):
def __init__(self,parent):
grd.Grid.__init__(self,parent)
self.CreateGrid(20,4)
self.SetColLabelValue(0,"Value")
self.SetColLabelValue(1,"Lo-Bound")
self.SetColLabelValue(2,"Hi-Bound")
self.SetColLabelValue(3,"Fit")
# The main panel:
class AnotherPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self,parent)
# main sizer for everything:
mainSizer = wx.BoxSizer(wx.VERTICAL)
# Add a few "sample panels":
mainSizer.Add(SamplePanel(self),0,wx.CENTER)
mainSizer.Add(SamplePanel(self),0,wx.CENTER)
mainSizer.Add(SamplePanel(self),0,wx.CENTER)
# Create the grid which will be scrollable:
scrolledPanel = scrolled.ScrolledPanel(self, size=(425,400))
table = SampleGrid(scrolledPanel)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(table,1,wx.ALL|wx.EXPAND,5)
scrolledPanel.SetSizer(sizer)
scrolledPanel.Layout()
scrolledPanel.SetupScrolling(scroll_x=False)
# Put the scrolled panel into a static box:
box = wx.StaticBox(self,-1,"Parameters: ")
sizer2 = wx.StaticBoxSizer(box,wx.VERTICAL)
sizer2.Add(scrolledPanel,1,wx.EXPAND)
mainSizer.Add(sizer2,1,wx.EXPAND)
self.SetSizer(mainSizer)
self.Fit()
# The main frame:
class MainFrame(wx.Frame):
def __init__(self,parent,title):
wx.Frame.__init__(self,parent,-1,title=title, size=(850,500))
# Put 2 panels side by side:
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(AnotherPanel(self),1,wx.EXPAND)
sizer.Add(AnotherPanel(self),1,wx.EXPAND)
self.SetSizer(sizer)
self.SetAutoLayout(1)
# And, the app and mainloop:
app = wx.App(False)
frame = MainFrame(None, "Scroll Test")
frame.Show(True)
app.MainLoop()
助けてくれてありがとう!これは私の最初の投稿でもあります。;)
コードのいくつかのタイプミスを編集 してください。今は正常に動作するはずです
WindowsとLinuxの両方で編集2 Python 2.7.3(キャノピーディストリビューション)とwxPython 2.8.10.1があります。