zoukankan      html  css  js  c++  java
  • Wxpython向导wx.adv.Wizard组件

    前言

      在界面程序主界面显示前,向导界面会引导用户初始化和配置其他数据,wxpython提供了wx.adv.Wizard,可参考:

      文档:https://wxpython.org/Phoenix/docs/html/wx.adv.Wizard.html

    Demo实现

    import wx
    import wx.adv
    
    class configWizard(wx.adv.Wizard):
        def __init__(self, addNew = False):
            super(configWizard, self).__init__(None, -1, "Configuration Wizard")
    
            self.Bind(wx.adv.EVT_WIZARD_PAGE_CHANGED, self.OnPageChanged)
            self.Bind(wx.adv.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
    
            self.firstInfoPage = Info1Page(self,'title1')
            self.machineSelectPage = Info2Page(self,'title2')
    
            wx.adv.WizardPageSimple.Chain(self.firstInfoPage, self.machineSelectPage)
    
            # self.GetPageAreaSizer().Add(self.firstInfoPage)
            self.RunWizard(self.firstInfoPage)
            self.Destroy()
    
        def OnPageChanging(self, e):
            print(e.GetPage())
            # e.GetPage().StoreData()
    
        def OnPageChanged(self, e):
            if e.GetPage().AllowNext():
                self.FindWindowById(wx.ID_FORWARD).Enable()
            else:
                self.FindWindowById(wx.ID_FORWARD).Disable()
            if e.GetPage().AllowBack():
                self.FindWindowById(wx.ID_BACKWARD).Enable()
            else:
                self.FindWindowById(wx.ID_BACKWARD).Disable()
    
    
    class Info1Page(wx.adv.WizardPageSimple):
        def __init__(self, parent, title):
            wx.adv.WizardPageSimple.__init__(self, parent)
            sizer = wx.GridBagSizer(5, 5)
            self.sizer = sizer
            self.SetSizer(sizer)
    
            title = wx.StaticText(self, -1, title)
            title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
            sizer.Add(title, pos=(0, 0), span=(1, 2), flag=wx.ALIGN_CENTRE | wx.ALL)
            sizer.Add(wx.StaticLine(self, -1), pos=(1, 0), span=(1, 2), flag=wx.EXPAND | wx.ALL)
            sizer.AddGrowableCol(1)
    
        def  AllowNext(self):
            print(1)
            return True
    
        def AllowBack(self):
            print(2)
            return False
    
    class Info2Page(wx.adv.WizardPageSimple):
        def __init__(self, parent, title):
            wx.adv.WizardPageSimple.__init__(self, parent)
            sizer = wx.GridBagSizer(5, 5)
            self.sizer = sizer
            self.SetSizer(sizer)
    
            title = wx.StaticText(self, -1, title)
            title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
            sizer.Add(title, pos=(0, 0), span=(1, 2), flag=wx.ALIGN_CENTRE | wx.ALL)
            sizer.Add(wx.StaticLine(self, -1), pos=(1, 0), span=(1, 2), flag=wx.EXPAND | wx.ALL)
            sizer.AddGrowableCol(1)
    
        def  AllowNext(self):
            print(1)
            return True
    
        def AllowBack(self):
            print(2)
            return True
    
    
    class Example(wx.Frame):
        def __init__(self, *args, **kw):
            super(Example, self).__init__(*args, **kw)
            configWizard()
            self.InitButton()
            self.SetSize((300, 200))
            self.SetTitle('wx.Gauge')
            self.Centre()
            self.Show(True)
        def InitButton(self):
            pnl = wx.Panel(self)
            self.btn1 = wx.Button(pnl, label="Start")
            self.Bind(wx.EVT_BUTTON, self.OnStart, self.btn1)
        def OnStart(self, e):
            pass
    
    def main():
        ex = wx.App()
        Example(None)
        ex.MainLoop()
    
    
    if __name__ == '__main__':
        main()

    相关代码详解

    继承向导类

    每一个向导page类都要继承wx.adv.WizardPageSimple,其中有两个函数必须实现:

    • AllowNext
    • AllowBack

    如果此向导界面页面后还有其他向导界面则AllowNext为True,反之为False,AllowBack表示此页面可以后退,但第一个向导界面不可设置为True。

    链接多个向导界面

    使用wx.adv.WizardPageSimple.Chain()可以将两个向导page前后关联起来,如果有多个page,同样如此。

    事件

    当向导界面发生改变时(切换界面,点击finsh)会触发事件,提供了如下事件:

    当界面内容正在更改,可通过事件参数获取到正在更改的界面,然后调用其对象(函数)对数据进行处理。

  • 相关阅读:
    Java 截取目标长度英文单词字符串 要求避免截断单词
    mysql报Fatal error encountered during command execution的解决办法
    PostgreSQL 学习01 Centos7.6安装PostgreSQL10
    Ubuntu14.04 + KinectV2驱动安装 以及 Ros接口(基于网上方法试错 改进版)
    传统定位方法简介--------里程计、IMU惯性传感器以及光电编码器等
    Vue.js 动态绑定class
    MongoDB数据导入导出成csv或者json
    exception 'yiiaseErrorException' with message 'Class 'MongoClient' not found'
    exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb
    浅谈Angular的 $q, defer, promise
  • 原文地址:https://www.cnblogs.com/-wenli/p/14152529.html
Copyright © 2011-2022 走看看