gpt4 book ai didi

python - wxPython 滚动面板滚动条大小问题

转载 作者:行者123 更新时间:2023-11-28 18:47:35 25 4
gpt4 key购买 nike

我在使用当前构建的 GUI 时遇到问题。我的应用程序目前由两个并排的笔记本组成,下面有一个终端/日志 textCtrl。左侧笔记本包含各种输入和输出面板,右侧笔记本包含一个或多个 matplotlib 图形。

问题是,在左侧笔记本中,我有一个页面,其中包含 3 个垂直堆叠的面板。前两个具有标准控件(复选框、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()

在此先感谢您的帮助!这也是我第一次发帖,所以我提前为任何失礼道歉 - 我尽量避免任何失礼!!! ;)

编辑代码中的一些拼写错误,现在应该可以正常运行了

edit 2 在 windows 和 linux 上我有 Python 2.7.3(Enthough Canopy 发行版)和 wxPython 2.8.10.1。

最佳答案

只需删除 scrolledPanel 实例的硬编码大小:

scrolledPanel = scrolled.ScrolledPanel(self)

这对我在 CentOS 上使用 wxPython 2.8.12 和 Python 2.6.6 很有效

关于python - wxPython 滚动面板滚动条大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17664107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com