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学习顺利!