【问题标题】:wxPython - change panel by buttonwxPython - 通过按钮更改面板
【发布时间】:2016-04-04 10:01:11
【问题描述】:

我想用 2 个面板编写简单的代码。简单的“你好”和旁边的按钮。按钮将面板更改为 panel_2,并带有文本“面板 2”和旁边的按钮。我不知道我怎样才能做到这一点。有我的代码:

import wx


class Glowne(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)

        self.SetSize((800,600))

        tekst = 'HELLO'
        font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
        wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)

        btn = wx.Button(self, -1, "Change panel", (345, 100))
        self.Bind(wx.EVT_BUTTON, Program.zmiana, btn)

 class Glowne1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        tekst = 'Panel 2'
        font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
    wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)

        btn = wx.Button(self, -1, "Change panel", (345, 100))
        #self.Bind(wx.EVT_BUTTON, frame.zmiana, btn)



class Program(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,'Program')

        panel_one = Glowne(self)
        self.panel_two = Glowne1(self)
        self.panel_two.Hide()
        self.SetSize((800,600))
        self.Centre()
    def zmiana(self):
        self.panel_one.Hide()
        self.panel_two.Show()   
if __name__ == "__main__":
    app = wx.App(False)
    frame = Program()
    frame.Show()
    app.MainLoop()

感谢您的帮助。我阅读了this tutorial,但无法在我的简单代码中使用它。

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    程序框架需要添加一个sizer,面板需要自己添加到btn,以便它们可以从类程序中访问,绑定到类程序内的按钮。

    这是一个例子

    import wx
    
    
    class Glowne(wx.Panel):
    
        def __init__(self, parent):
            wx.Panel.__init__(self, parent=parent)
    
            self.SetSize((800, 600))
    
            tekst = 'HELLO'
            font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
            wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
    
            self.btn = wx.Button(self, -1, "Change panel", (345, 100))
    
    
    class Glowne1(wx.Panel):
    
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
    
            tekst = 'Panel 2'
            font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
            wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
    
            self.btn = wx.Button(self, -1, "Change panel", (345, 100))
    
    
    class Program(wx.Frame):
    
        def __init__(self):
            wx.Frame.__init__(self, None, wx.ID_ANY, 'Program')
    
            sizer = wx.BoxSizer()
            self.SetSizer(sizer)
    
            self.panel_one = Glowne(self)
            sizer.Add(self.panel_one, 1, wx.EXPAND)
            self.panel_one.btn.Bind(wx.EVT_BUTTON, self.show_panel_two)
            self.panel_two = Glowne1(self)
            sizer.Add(self.panel_two, 1, wx.EXPAND)
            self.panel_two.btn.Bind(wx.EVT_BUTTON, self.show_panel_one)
            self.panel_two.Hide()
            self.SetSize((800, 600))
            self.Centre()
    
        def show_panel_one(self, event):
            self.panel_one.Show()
            self.panel_two.Hide()
            self.Layout()
    
        def show_panel_two(self, event):
            self.panel_two.Show()
            self.panel_one.Hide()
            self.Layout()
    
    
    if __name__ == "__main__":
        app = wx.App(False)
        frame = Program()
        frame.Show()
        app.MainLoop()
    

    【讨论】:

    • 谢谢。它工作正常。它是编写程序的正确方法吗?我的意思是带有面板、程序设置等的程序?
    猜你喜欢
    • 2020-12-11
    • 2015-02-03
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多