使用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来绑定事件和按钮,
其中:
- 第一个参数是 事件类型,这里描述的是:事件按钮wx.EVT_BUTTON;如果是单选框,就用wx.EVT_RADIOBUTTON
- 第二个参数是 处理函数:GetFormulaOnClick
- 第三个参数是 绑定的具体按钮组件名 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()