【问题标题】:How to switch panels in python using wxPython如何使用 wxPython 在 python 中切换面板
【发布时间】:2019-12-24 16:53:03
【问题描述】:

我正在尝试创建一个允许用户使用按钮切换信息显示的应用程序。代码的基本思想是用户看到屏幕左侧的按钮,当用户按下“按钮 1”时,代码显示Panel1。到目前为止,我已经制作了 2 个按钮,并且还编写了 2 个面板的代码,但我不知道如何更新我的 MainFrame,因此当按下其中一个按钮时,它会显示不同的面板。
代码:

import wx

TabNumber = 1


class ButtonPanel(wx.Panel):
    def __init__(self, parent):
        global TabNumber
        super(ButtonPanel, self).__init__(parent, -1)
        self.Tab1Button = wx.Button(self, label="TAB 1")
        self.Tab1Button.Bind(wx.EVT_BUTTON, self.SwitchTab(1))
        self.Tab2Button = wx.Button(self, label="TAB 2")
        self.Tab2Button.Bind(wx.EVT_BUTTON, self.SwitchTab(2))

        self.Sizer = wx.BoxSizer(wx.VERTICAL)
        self.Sizer.Add(self.Tab1Button, wx.CENTER,0)
        self.Sizer.Add(self.Tab2Button, wx.CENTER, 0)

        self.SetSizer(self.Sizer)

    def SwitchTab(self, tab):
        def OnClick(event):
            print(f"Switch to tab {tab} started")
            TabNumber = tab
            print(TabNumber)
        return OnClick


class Panel1(wx.Panel):
    def __init__(self, parent):
        super(Panel1, self).__init__(parent, -1)
        self.panel = wx.Panel(self)
        self.text = wx.StaticText(self.panel, label="1")


class Panel2(wx.Panel):
    def __init__(self, parent):
        super(Panel2, self).__init__(parent, -1)
        self.panel = wx.Panel(self)
        self.text = wx.StaticText(self.panel, label="2")


class MainFrame(wx.Frame):
    def __init__(self):
        super(MainFrame, self).__init__(None, -1, "Test Application")

        self.Panels = {
            "Panel1": Panel1(self),
            "Panel2": Panel2(self)

        }
        self.MySizer = wx.BoxSizer(wx.HORIZONTAL)
        self.tabpanel = ButtonPanel(self)
        self.MySizer.Add(self.tabpanel,wx.CENTER,0)

        self.InfoPanel = self.Panels["Panel"+str(TabNumber)]
        self.MySizer.Add(self.InfoPanel, wx.CENTER,0)
        self.SetSizer(self.MySizer)

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

我还想知道如何调整分配给我的ButtonPanel 和我的InfoPanel 的空间比例。

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    据我所知,您正在尝试做一些像巫师一样工作的事情...一方面,您可以使用wx.adv.Wizard。另一方面,你可以看看这个教程,它做了一些非常相似的事情,并根据你的需要进行调整:

    WXPython: How to create a generic wizard

    祝你好运!

    【讨论】:

    • 谢谢!这可能正是我所需要的。
    • 还有一个使用wx.Notebook API 的wx.Simplebook 类,但没有用于更改页面的面向用户的控件。相反,页面更改由应用程序处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    相关资源
    最近更新 更多