wxpython 滚动窗口不显示
wxpython scrolledwindow not displaying
相对较新 python (2.7) 并试图弄清楚 wxpython (所以对于代码使用不当,我提前表示歉意)。我有一个 GUI,框架上有多个可切换面板。我需要框架是可滚动的,所以我使用了 ScrolledWindow 但现在一些低于初始框架大小的 GUI 元素在滚动时不显示。
我发现更改我的显示器分辨率可以解决问题,但我希望无论分辨率如何都能正常工作。
下面是我遇到的问题的示例(不显示 hi4 并切断 hi4)
import wx
from apanel import apanel
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title,size=(1000,1100))
self.parent=parent
self.scroll = wx.ScrolledWindow(self, -1)
self.scroll.SetScrollbars(1,1,1000,1100)
button0=wx.Button(self.scroll,-1,"hi0",(100,610))
self.panel=apanel(self.scroll)
self.CreateStatusBar()
self.sizer= wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.panel, 1, wx.EXPAND)
self.SetSizer(self.sizer)
self.Show(True)
app=wx.App(False)
frame=simpleapp_wx(None,-1,'Demo')
frame.Show()
app.MainLoop()
面板在另一个 class 中(在我称为 apanel.py 的单独文件中)
导入 wx
class apanel(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self,parent=parent)
button=wx.Button(self,-1,"hi",(800,60))
button2=wx.Button(self,-1,"hi2",(200,600))
button3=wx.Button(self,-1,"hi3",(800,800))
button4=wx.Button(self,-1,"hi4",(500,900))
button5=wx.Button(self,-1,'hi5',(10,100))
我在您的代码中发现了一些错误,解决起来很简单。查看下面的工作面板:
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title,size=(1000,1100))
self.parent=parent
self.scroll = wx.ScrolledWindow(self, -1)
self.scroll.SetScrollbars(1,1,1000,1100)
self.CreateStatusBar()
sizer = wx.BoxSizer(wx.VERTICAL)
self.scroll.SetSizer(sizer) # The scrolledWindow sizer
self.panel = wx.Panel(self.scroll)
sizer.Add(self.panel, 0, wx.EXPAND)
button0=wx.Button(self.panel,-1,"hi0",(100,610))
备注:
- 如果您使用滚动 window,请创建一个 sizer,并在滚动 window 中设置该 sizer。
- 面板 apanel 需要添加到上面一行中创建的 scrolled sizer 上。
- 面板没有调整大小,因为 simpleapp_wx (Frame) 是由创建的 BoxSizer 设置的,顺序是相反的。
- 如果您在之后添加一些按钮,请将面板与父级一起放置,而不是滚动window。
我建议你使用 wxPython 演示和文档:http://www.wxpython.org/download.php 有一堆工作示例。
祝你wxpython学习顺利!
相对较新 python (2.7) 并试图弄清楚 wxpython (所以对于代码使用不当,我提前表示歉意)。我有一个 GUI,框架上有多个可切换面板。我需要框架是可滚动的,所以我使用了 ScrolledWindow 但现在一些低于初始框架大小的 GUI 元素在滚动时不显示。
我发现更改我的显示器分辨率可以解决问题,但我希望无论分辨率如何都能正常工作。
下面是我遇到的问题的示例(不显示 hi4 并切断 hi4)
import wx
from apanel import apanel
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title,size=(1000,1100))
self.parent=parent
self.scroll = wx.ScrolledWindow(self, -1)
self.scroll.SetScrollbars(1,1,1000,1100)
button0=wx.Button(self.scroll,-1,"hi0",(100,610))
self.panel=apanel(self.scroll)
self.CreateStatusBar()
self.sizer= wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.panel, 1, wx.EXPAND)
self.SetSizer(self.sizer)
self.Show(True)
app=wx.App(False)
frame=simpleapp_wx(None,-1,'Demo')
frame.Show()
app.MainLoop()
面板在另一个 class 中(在我称为 apanel.py 的单独文件中) 导入 wx
class apanel(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self,parent=parent)
button=wx.Button(self,-1,"hi",(800,60))
button2=wx.Button(self,-1,"hi2",(200,600))
button3=wx.Button(self,-1,"hi3",(800,800))
button4=wx.Button(self,-1,"hi4",(500,900))
button5=wx.Button(self,-1,'hi5',(10,100))
我在您的代码中发现了一些错误,解决起来很简单。查看下面的工作面板:
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title,size=(1000,1100))
self.parent=parent
self.scroll = wx.ScrolledWindow(self, -1)
self.scroll.SetScrollbars(1,1,1000,1100)
self.CreateStatusBar()
sizer = wx.BoxSizer(wx.VERTICAL)
self.scroll.SetSizer(sizer) # The scrolledWindow sizer
self.panel = wx.Panel(self.scroll)
sizer.Add(self.panel, 0, wx.EXPAND)
button0=wx.Button(self.panel,-1,"hi0",(100,610))
备注:
- 如果您使用滚动 window,请创建一个 sizer,并在滚动 window 中设置该 sizer。
- 面板 apanel 需要添加到上面一行中创建的 scrolled sizer 上。
- 面板没有调整大小,因为 simpleapp_wx (Frame) 是由创建的 BoxSizer 设置的,顺序是相反的。
- 如果您在之后添加一些按钮,请将面板与父级一起放置,而不是滚动window。
我建议你使用 wxPython 演示和文档:http://www.wxpython.org/download.php 有一堆工作示例。
祝你wxpython学习顺利!