文章目录
- 1、V1.0_GUI初步排版梳理代码
- 2、V2.0_优化结构为面向对象
- 3、V3.0 总结
- 关于GUI窗体实现的总体思路梳理
1、V1.0_GUI初步排版梳理代码
# 试验带标签文字的文本框
import wx
# 初始化APP
app = wx.App()
# 定义窗体
window = wx.Frame(None, title="试验", size=(500, 500))
# 定义panel
panel = wx.Panel(window)
# 定义标签
lblmin = wx.StaticText(panel, label="最小长度")
# 定义文本框
txtmin = wx.TextCtrl(panel)
# 定义标签
lblmax = wx.StaticText(panel, label="最大长度")
# 定义文本框
txtmax = wx.TextCtrl(panel)
# 定义复选框
chkB1 = wx.CheckBox(panel, label="包含大写字母")
chkB2= wx.CheckBox(panel, label="包含小写字母")
chkB3 = wx.CheckBox(panel, label="包含数字")
chkB4= wx.CheckBox(panel, label="包含符号")
chkB5 = wx.CheckBox(panel, label="包含序号")
chkB6 = wx.CheckBox(panel, label="包含邮箱后缀")
chkB7 = wx.CheckBox(panel, label="保存到文件")
# 定义标签
lblfile = wx.StaticText(panel, label="文件名及路径")
# 定义文本框
txtfile = wx.TextCtrl(panel)
# 定义标签
lblshu = wx.StaticText(panel, label="数据总数")
# 定义文本框
txtshu = wx.TextCtrl(panel)
# 定义2个按钮
butOK = wx.Button(panel, label="确定")
butreset = wx.Button(panel, label="重置")
# 设置布局
box1 = wx.BoxSizer() # 默认是横向的
box1.Add(lblmin, flag=wx.LEFT | wx.TOP, border=10)
box1.Add(txtmin, flag=wx.LEFT | wx.TOP, border=10)
box1.Add(lblmax, flag=wx.LEFT | wx.TOP, border=10)
box1.Add(txtmax, flag=wx.LEFT | wx.TOP, border=10)
# 设置第二行的布局
box2 = wx.BoxSizer() # 默认是横向的
box2.Add(chkB1, flag=wx.LEFT | wx.TOP, border=10)
box2.Add(chkB2, flag=wx.LEFT | wx.TOP, border=10)
# 设置第三行的布局
box3 = wx.BoxSizer() # 默认是横向的
box3.Add(chkB3, flag=wx.LEFT | wx.TOP, border=10)
box3.Add(chkB4, flag=wx.LEFT | wx.TOP, border=10)
# 设置第四行的布局
box4 = wx.BoxSizer() # 默认是横向的
box4.Add(chkB5, flag=wx.LEFT | wx.TOP, border=10)
box4.Add(chkB6, flag=wx.LEFT | wx.TOP, border=10)
# 设置第五行的布局
box5 = wx.BoxSizer() # 默认是横向的
box5.Add(chkB7, flag=wx.LEFT | wx.TOP, border=10)
box5.Add(lblfile, flag=wx.LEFT | wx.TOP, border=10)
box5.Add(txtfile, flag=wx.LEFT | wx.TOP, border=10)
# 设置第六行的布局
box6 = wx.BoxSizer() # 默认是横向的
box6.Add(lblshu, flag=wx.LEFT | wx.TOP, border=10)
box6.Add(txtshu, flag=wx.LEFT | wx.TOP, border=10)
# 设置第七行的布局
box7 = wx.BoxSizer() # 默认是横向的
box7.Add(butOK, flag=wx.LEFT | wx.TOP, border=10)
box7.Add(butreset, flag=wx.LEFT | wx.TOP, border=10)
# 设置垂直布局
boxFinal = wx.BoxSizer(wx.VERTICAL)
boxFinal.Add(box1)
boxFinal.Add(box2)
boxFinal.Add(box3)
boxFinal.Add(box4)
boxFinal.Add(box5)
boxFinal.Add(box6)
boxFinal.Add(box7)
panel.SetSizer(boxFinal)
# 显示窗体
window.Show(True)
# 启动app
app.MainLoop()
2、V2.0_优化结构为面向对象
# V2.0优化结构---面向对象
import wx
import string, random
# 定义类
class GUI_CreatData:
# 类的初始化
def __init__(self):
# 初始化APP
self.app = wx.App()
# 定义窗体
self.window = wx.Frame(None, title="试验", size=(500, 500))
# 定义panel
self.panel = wx.Panel(self.window)
# 定义标签
self.lblmin = wx.StaticText(self.panel, label="最小长度")
# 定义文本框
self.txtmin = wx.TextCtrl(self.panel)
# 定义标签
self.lblmax = wx.StaticText(self.panel, label="最大长度")
# 定义文本框
self.txtmax = wx.TextCtrl(self.panel)
# 定义复选框
self.chkB1 = wx.CheckBox(self.panel, label="包含大写字母")
self.chkB2 = wx.CheckBox(self.panel, label="包含小写字母")
self.chkB3 = wx.CheckBox(self.panel, label="包含数字")
self.chkB4 = wx.CheckBox(self.panel, label="包含符号")
self.chkB5 = wx.CheckBox(self.panel, label="包含序号")
self.chkB6 = wx.CheckBox(self.panel, label="包含邮箱后缀")
self.chkB7 = wx.CheckBox(self.panel, label="保存到文件")
# 定义标签
self.lblfile = wx.StaticText(self.panel, label="文件名及路径")
# 定义文本框
self.txtfile = wx.TextCtrl(self.panel)
# 定义标签
self.lblshu = wx.StaticText(self.panel, label="数据总数")
# 定义文本框
self.txtshu = wx.TextCtrl(self.panel)
# 定义2个按钮
self.butOK = wx.Button(self.panel, label="确定")
self.butreset = wx.Button(self.panel, label="重置")
# 控件布局
def layout(self):
# 设置布局
box1 = wx.BoxSizer() # 默认是横向的
box1.Add(self.lblmin, flag=wx.LEFT | wx.TOP, border=10)
box1.Add(self.txtmin, flag=wx.LEFT | wx.TOP, border=10)
box1.Add(self.lblmax, flag=wx.LEFT | wx.TOP, border=10)
box1.Add(self.txtmax, flag=wx.LEFT | wx.TOP, border=10)
# 设置第二行的布局
box2 = wx.BoxSizer() # 默认是横向的
box2.Add(self.chkB1, flag=wx.LEFT | wx.TOP, border=10)
box2.Add(self.chkB2, flag=wx.LEFT | wx.TOP, border=10)
# 设置第三行的布局
box3 = wx.BoxSizer() # 默认是横向的
box3.Add(self.chkB3, flag=wx.LEFT | wx.TOP, border=10)
box3.Add(self.chkB4, flag=wx.LEFT | wx.TOP, border=10)
# 设置第四行的布局
box4 = wx.BoxSizer() # 默认是横向的
box4.Add(self.chkB5, flag=wx.LEFT | wx.TOP, border=10)
box4.Add(self.chkB6, flag=wx.LEFT | wx.TOP, border=10)
# 设置第五行的布局
box5 = wx.BoxSizer() # 默认是横向的
box5.Add(self.chkB7, flag=wx.LEFT | wx.TOP, border=10)
box5.Add(self.lblfile, flag=wx.LEFT | wx.TOP, border=10)
box5.Add(self.txtfile, flag=wx.LEFT | wx.TOP, border=10)
# 设置第六行的布局
box6 = wx.BoxSizer() # 默认是横向的
box6.Add(self.lblshu, flag=wx.LEFT | wx.TOP, border=10)
box6.Add(self.txtshu, flag=wx.LEFT | wx.TOP, border=10)
# 设置第七行的布局
box7 = wx.BoxSizer() # 默认是横向的
box7.Add(self.butOK, flag=wx.LEFT | wx.TOP, border=10)
box7.Add(self.butreset, flag=wx.LEFT | wx.TOP, border=10)
# 设置垂直布局
boxFinal = wx.BoxSizer(wx.VERTICAL)
for i in range(1, 8):
boxFinal.Add(eval(f"box{i}")) # eval函数将字符串转换为对象
self.panel.SetSizer(boxFinal)
# 运行app
def run(self):
self.window.Show(True)
self.app.MainLoop()
if __name__ == '__main__':
gui = GUI_CreatData()
gui.layout()
gui.run()