【wxpython】使用python的wxpython库构造一个简单的GUI界面

使用python的wxpython库构造一个简单界面:

参考链接:

wxPython Panel面板的用法:http://www.weixueyuan.net/a/839.html
wxPython StaticBoxSizer: https://codingdict.com/article/9460
滚动的 staticBoxSizer : https://www.pythonheidong.com/blog/article/814162/016ed4b822761a330f46/
WXPython布局 :https://www.yiibai.com/wxpython/wx_staticboxsizer.html

参考书籍:

wxPython实战(中文版).pdf

安装:python -m pip install wxpython

最终效果:

在这里插入图片描述

后续可以使用Bind来绑定事件和按钮,

其中:

  1. 第一个参数是 事件类型,这里描述的是:事件按钮wx.EVT_BUTTON;如果是单选框,就用wx.EVT_RADIOBUTTON
  2. 第二个参数是 处理函数:GetFormulaOnClick
  3. 第三个参数是 绑定的具体按钮组件名 LoadButton
        self.Bind(wx.EVT_BUTTON, self.GetFormulaOnClick, self.LoadButton)
处理函数的例子:
 def GetFormulaOnClick(self, event):
        # 显示载入公式
        self.LoadButton.SetLabel("已载入")

点击“载入公式”按钮,按钮会变为“已载入”
在这里插入图片描述
方法中第二个参数为event
在这里插入图片描述
绑定效果:
在这里插入图片描述

全部代码:

from typing import Text
import wx
import wx.lib.scrolledpanel as scrolled




class ScrollPanel(scrolled.ScrolledPanel):
     def __init__(self, parent):
        """Constructor"""
        super(ScrollPanel, self).__init__(parent,
                                      style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER)
        self.SetupScrolling()

        box = wx.StaticBox(self, label="Test Box")
        bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)

        main_sizer = wx.BoxSizer()
        main_sizer.Add(bsizer, 1, wx.EXPAND)
        self.SetSizer(main_sizer)

class Mywin(wx.Frame):
    def __init__(self, parent, title):
        super(Mywin, self).__init__(parent, title=title, size=(750, 970))
        # 创建白板
        panel = wx.Panel(self)
        # panel2 = ScrollPanel(self)
        # 创建垂直与水平box盒子
        vboxMain = wx.BoxSizer(wx.VERTICAL)  # 整体垂直盒子,水平盒子并排放在里面
        nmbox1 = wx.BoxSizer(wx.HORIZONTAL)  # 水平盒子1 第一行 选择输入方式
        nmbox3 = wx.BoxSizer(wx.HORIZONTAL)  # 水平盒子3 第3行
        vboxl = wx.BoxSizer(wx.VERTICAL)  # 垂直盒子左 嵌入在水平盒子2里面
        vboxr = wx.BoxSizer(wx.VERTICAL)  # 垂直盒子右

        # 创建一个wx.StaticBox对象。
        # 声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数。
        static_nmbox1 = wx.StaticBox(panel, -1, '选择载入数据方式:')
        nmbox1Sizer = wx.StaticBoxSizer(static_nmbox1, wx.VERTICAL)

        '''
            在水平盒子1里添加进单选框和按钮 3个组件
        '''
        # 构建静态文本框与输入框
        self.radio1 = wx.RadioButton(
            panel, -1, "读取手动输入数据", style=wx.ALIGN_LEFT)
        self.radio2 = wx.RadioButton(
            panel, -1, "从文本读取(载入默认数据)", style=wx.ALIGN_LEFT)


        self.okButton = wx.Button(panel, -1, '开始计算巴拉巴拉巴拉',size = (360,30))
      
        # 添加组件
        nmbox1.Add(self.radio1, 0, wx.ALL | wx.CENTER, 5)
        nmbox1.Add(self.radio2, 0, wx.ALL | wx.CENTER, 5)
        nmbox1.Add(self.okButton, 0, wx.ALL | wx.CENTER, 5)
        # 在StaticBoxSizer添加进水平盒子
        nmbox1Sizer.Add(nmbox1, 0, wx.ALL | wx.CENTER, 10)

        # 水平盒子2
        static_nmbox2 = wx.StaticBox(panel, -1, '请先输入公式:')
        nmbox2Sizer = wx.StaticBoxSizer(static_nmbox2, wx.VERTICAL)

        nmSizer2 = wx.FlexGridSizer(cols=3, hgap=6, vgap=6)

        self.LoadButton = wx.Button(panel, -1, '载入公式',size = (120,30))
        self.Bind(wx.EVT_BUTTON, self.GetFormulaOnClick, self.LoadButton)
       

        text_formulaId = wx.StaticText(panel, -1, "请输入需要计算的公式ID:",size = (180,30),style =wx.TE_CENTER)
        self.input_formulaId = wx.TextCtrl(
            panel, -1, 'id=',size = (260,30), style=wx.ALIGN_LEFT)
        nmSizer2.AddMany([text_formulaId,
                          self.input_formulaId, self.LoadButton])
        nmbox2Sizer.Add(nmSizer2, 0, wx.ALL | wx.CENTER, 10)

        # 水平盒子3
        nmbox3 = wx.StaticBox(panel, -1, 'MainPanel:')
        nmSizer3 = wx.StaticBoxSizer(nmbox3, wx.HORIZONTAL)

        '''
            垂直盒子左部分
        '''
        vboxlSizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)

        self.text_level = wx.StaticText(panel, -1, "level:输入玩家等级")
        self.input_level = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_fensi = wx.StaticText(panel, -1, "fensi:输入玩家粉丝数")
        self.input_fensi = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_starLevel = wx.StaticText(panel, -1, "starLevel:输入玩家咖位等级")
        self.input_starLevel = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_starValue = wx.StaticText(panel, -1, "starValue:输入玩家星韵值")
        self.input_starValue = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_knowledge = wx.StaticText(panel, -1, "knowledge:输入玩家学识属性")
        self.input_knowledge = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_inspiration = wx.StaticText(panel, -1, "inspiration:输入玩家灵感属性")
        self.input_inspiration = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_charm = wx.StaticText(panel, -1, "charm:输入玩家魅力属性")
        self.input_charm = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_acting = wx.StaticText(panel, -1, "acting:输入玩家演技属性")
        self.input_acting = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_battleMaxMana = wx.StaticText(panel, -1, "battleMaxMana:输入玩家情绪上限")
        self.input_battleMaxMana = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)

        vboxlSizer.AddMany([self.text_level, self.input_level, self.text_fensi, self.input_fensi,
                            self.text_starLevel, self.input_starLevel, self.text_starValue, self.input_starValue,
                            self.text_knowledge, self.input_knowledge, self.text_inspiration, self.input_inspiration,
                            self.text_charm, self.input_charm, self.text_acting, self.input_acting,
                            self.text_battleMaxMana, self.input_battleMaxMana])
        vboxl.Add(vboxlSizer, 0, wx.ALL | wx.CENTER, 10)
        nmSizer3.Add(vboxl, 0, wx.ALL | wx.CENTER, 10)

        # 垂直盒子右:包含垂直盒子右上,垂直盒子右下
        vboxr = wx.BoxSizer(wx.VERTICAL)

        vboxr_static = wx.StaticBox(panel, -1, '请输入公式参数:')
        vboxr_static_Sizer = wx.StaticBoxSizer(vboxr_static, wx.VERTICAL)
        nmSizer3.Add(vboxr_static_Sizer, 0, wx.ALL | wx.CENTER, 10)

        text_formulaName = wx.StaticText(panel, -1, "公式名称:")
        self.result_formulaName = wx.TextCtrl(
            panel, -1, "????", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)

        vboxr_static_Sizer.Add(vboxr, 0, wx.ALL | wx.CENTER, 10)
        '''
            垂直右盒子上
        '''
        vboxrUpSizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)
        vboxrUpSizer.AddMany([text_formulaName,
                              self.result_formulaName])

        vboxr.Add(vboxrUpSizer, 0, wx.ALL | wx.CENTER, 10)

        '''
            垂直右盒子下
        '''
        vboxrDownSizer = wx.FlexGridSizer(cols=3, hgap=6, vgap=6)

        self.text_arg1 = wx.StaticText(panel, -1, "arg1:")
        self.trans_arg1 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg1 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg2 = wx.StaticText(panel, -1, "arg2:")
        self.trans_arg2 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg2 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg3 = wx.StaticText(panel, -1, "arg3:")
        self.trans_arg3 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg3 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg4 = wx.StaticText(panel, -1, "arg4:")
        self.trans_arg4 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg4 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg5 = wx.StaticText(panel, -1, "arg5:")
        self.trans_arg5 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg5 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg6 = wx.StaticText(panel, -1, "arg6:")
        self.trans_arg6 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg6 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg7 = wx.StaticText(panel, -1, "arg7:")
        self.trans_arg7 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg7 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg8 = wx.StaticText(panel, -1, "arg8:")
        self.trans_arg8 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg8 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg9 = wx.StaticText(panel, -1, "arg9:")
        self.trans_arg9 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg9 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)
        self.text_arg10 = wx.StaticText(panel, -1, "arg10:")
        self.trans_arg10 = wx.TextCtrl(
            panel, -1, "???", style=wx.TE_READONLY | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)
        self.input_arg10 = wx.TextCtrl(panel, -1, '', style=wx.ALIGN_LEFT)

        vboxrDownSizer.AddMany([self.text_arg1, self.trans_arg1, self.input_arg1, self.text_arg2, self.trans_arg2, self.input_arg2,
                                self.text_arg3, self.trans_arg3, self.input_arg3, self.text_arg4, self.trans_arg4, self.input_arg4,
                                self.text_arg5, self.trans_arg5, self.input_arg5, self.text_arg6, self.trans_arg6, self.input_arg6,
                                self.text_arg7, self.trans_arg7, self.input_arg7,self.text_arg8, self.trans_arg8, self.input_arg8,
                                self.text_arg9, self.trans_arg9, self.input_arg9,self.text_arg10, self.trans_arg10, self.input_arg10,])

        vboxr.Add(vboxrDownSizer, 0, wx.ALL | wx.CENTER, 10)

        '''
        水平盒子4:公式信息
        '''
        nmbox4 = wx.StaticBox(panel, -1, '公式信息:')
        nmSizer4 = wx.StaticBoxSizer(nmbox4, wx.HORIZONTAL)
        self.formula_Text = wx.TextCtrl(panel, -1, "?????", size=(1000, 150), style=wx.TE_READONLY |
                                        wx.TE_MULTILINE | wx.ALIGN_LEFT | wx.TE_NOHIDESEL)

        nmSizer4.Add(self.formula_Text, 0, wx.ALL | wx.CENTER, 10)

        '''
        水平盒子5:公式计算结果
        '''
        nmbox5 = wx.StaticBox(panel, -1, '公式计算结果:')
        nmSizer5 = wx.StaticBoxSizer(nmbox5, wx.HORIZONTAL)
        self.formula_Text2 = wx.TextCtrl(panel, -1, "returlt = ?????????", size=(2000, 50), style=wx.TE_READONLY |
                                         wx.ALIGN_LEFT | wx.TE_NOHIDESEL)

        nmSizer5.Add(self.formula_Text2, 0, wx.ALL | wx.CENTER, 10)

        # 在最大的 Main垂直盒子里添加StaticBoxSizer盒子
        vboxMain.Add(nmbox2Sizer, 0, wx.ALL | wx.CENTER, 5)  # 水平盒子2
        vboxMain.Add(nmbox1Sizer, 0, wx.ALL | wx.CENTER, 5)  # 水平盒子1
        vboxMain.Add(nmSizer3, 0, wx.ALL | wx.CENTER, 5)  # 水平盒子3
        vboxMain.Add(nmSizer4, 0, wx.ALL | wx.CENTER, 5)  # 水平盒子3
        vboxMain.Add(nmSizer5, 0, wx.ALL | wx.CENTER, 5)  # 水平盒子3

        panel.SetSizer(vboxMain)
        self.Centre()
        panel.Fit()
        self.Show()

        # 关系:
        # 垂直box盒子添加StaticBoxSizer盒子
        # StaticBoxSizer盒子添加水平盒子
    def GetFormulaOnClick(self, event):
        # 显示载入公式
        self.LoadButton.SetLabel("已载入")

    

if __name__ == '__main__':
    app = wx.App()
    Mywin(None, '公式快速计算  测试工具')
    app.MainLoop()

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值