Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过事件创建wxpython滚动窗口(框架)_Python_Wxpython_Scrolledwindow - Fatal编程技术网

通过事件创建wxpython滚动窗口(框架)

通过事件创建wxpython滚动窗口(框架),python,wxpython,scrolledwindow,Python,Wxpython,Scrolledwindow,我试图通过单击一个按钮在wxpanel中创建一个新框架 下面是我的代码。 它不起作用。 滚动条不会显示 有人能帮我吗?谢谢 (更新:在新窗口中添加一个按钮) , (更新2) 根据Joran Beasley的密码 此代码创建滚动条,但未显示按钮2。 文本小部件在滚动时无法正常工作 import wx class ftest(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, wx.ID_ANY,

我试图通过单击一个按钮在wxpanel中创建一个新框架

下面是我的代码。 它不起作用。 滚动条不会显示

有人能帮我吗?谢谢

(更新:在新窗口中添加一个按钮)

,

(更新2) 根据Joran Beasley的密码

此代码创建滚动条,但未显示按钮2。 文本小部件在滚动时无法正常工作

import wx

class ftest(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "test Panel", size=(800, 500), pos=(0,0))
        self.MainPanel = wx.Panel(self, wx.ID_ANY)
        self.btn1 = wx.Button(self.MainPanel, pos=(50,100), label="New Frame")
        self.btn1.Bind(wx.EVT_BUTTON, self.newFrame)

    def newFrame(self, event):
        self.new_window = wx.Frame(self, title='frame2', pos=(800,0))
        self.scroll = wx.ScrolledWindow(self.new_window, -1,size=(500,500))
        self.scroll.SetScrollbars(1, 1, 1600, 1400)
        self.new_window.Layout()
        self.new_window.Fit()
        self.new_window.Show()
        self.btn2 = wx.Button(self.new_window, pos=(50,100), label="button2")
        wx.StaticText(self.new_window, -1, 'test text', pos=(50, 200))

if __name__ == "__main__":
    app = wx.App(False)
    frame = ftest()
    frame.Show()
    app.MainLoop()
,

(更新3) 我发现了我的错误。小部件应该在滚动对象上,而不是在框架对象上。 Layout()和Fit()不是必需的。 所以正确的代码是

import wx

class ftest(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "test Panel", size=(800, 500), pos=(0,0))
        self.MainPanel = wx.Panel(self, wx.ID_ANY)
        self.btn1 = wx.Button(self.MainPanel, pos=(50,100), label="New Frame")
        self.btn1.Bind(wx.EVT_BUTTON, self.newFrame)

    def newFrame(self, event):
        self.new_window = wx.Frame(self, title='frame2', pos=(800,0),size=(500,500))
        self.scroll = wx.ScrolledWindow(self.new_window, -1)
        self.scroll.SetScrollbars(1, 1, 1600, 1400)
        #self.new_window.Layout()
        #self.new_window.Fit()
        self.new_window.Show()
        self.btn2 = wx.Button(self.scroll, pos=(50,100), label="button2")
        wx.StaticText(self.scroll, -1, 'test text', pos=(50, 200))

if __name__ == "__main__":
    app = wx.App(False)
    frame = ftest()
    frame.Show()
    app.MainLoop()
您需要布局新窗口。。。由于您显然希望它填充500500区域,因此需要使用尺寸测量器

def newFrame(self, event):
    self.new_window = wx.Frame(self, title='frame2', size=(500, 500), pos=(800,0))
    sz = wx.BoxSizer()
    sz.SetMinSize((500,500)) #force minimum size
    self.scroll = wx.ScrolledWindow(self.new_window, -1)
    sz.Add(self.scroll,1,wx.EXPAND)
    self.scroll.SetScrollbars(1, 1, 1600, 1400)
    self.new_window.SetSizer(sz)
    self.new_window.Layout()
    self.new_window.Fit()
    self.new_window.Show()
或者只需强制调整包含的滚动窗口的大小(这是您通常对滚动窗口执行的操作)


你能解释一下“不工作”吗?你的代码对我来说很好,这意味着它会弹出一个标有“测试面板”的窗口,上面有一个标有“新框架”的按钮。单击按钮时,会出现一个标记为“frame2”的新窗口。它会打开一个新的框架,但不会显示滚动条。我不能在这里上传图片。所以我把我的图像放在我的谷歌硬盘里。请点击这个,滚动条在那里。。。你就是看不见他们…谢谢你的回答。它创建了一个带有滚动条的窗口,但大小不是(500500),如果我在代码下方添加一个按钮self.btn2=wx.button(self.new\u window,pos=(50100),label=“button2”),它将再次被破坏。请参阅新建编辑。。。这会迫使它填满空格谢谢你的第二个答案!,但如果我添加一个按钮对象,当我滚动它时,它的行为会很奇怪。你是什么意思?无论如何,这对于另一个问题来说可能是最好的。如果我添加一个按钮并垂直滚动,它会变成,,按钮不会停留在固定位置:(
def newFrame(self, event):
    self.new_window = wx.Frame(self, title='frame2', size=(500, 500), pos=(800,0))

    self.scroll = wx.ScrolledWindow(self.new_window, -1)
    self.scroll.SetScrollbars(1, 1, 1600, 1400)
    self.new_window.Layout()
    self.new_window.Fit()
    self.new_window.Show()
def newFrame(self, event):
    self.new_window = wx.Frame(self, title='frame2', size=(500, 500), pos=(800,0))
    sz = wx.BoxSizer()
    sz.SetMinSize((500,500)) #force minimum size
    self.scroll = wx.ScrolledWindow(self.new_window, -1)
    sz.Add(self.scroll,1,wx.EXPAND)
    self.scroll.SetScrollbars(1, 1, 1600, 1400)
    self.new_window.SetSizer(sz)
    self.new_window.Layout()
    self.new_window.Fit()
    self.new_window.Show()
def newFrame(self, event):
    self.new_window = wx.Frame(self, title='frame2', pos=(800,0))

    self.scroll = wx.ScrolledWindow(self.new_window, -1,size=(500,500))
    self.scroll.SetScrollbars(1, 1, 1600, 1400)
    self.new_window.Layout()
    self.new_window.Fit()
    self.new_window.Show()