常用控件:
文本控件:TextCtrl
标签控件:StaticText
复选框控件:CheckBox
按钮控件:Button
布局控件:BoxSizer=》注意布局必须进行设置才能生效Panel.SetSizer(Boxsizer名称)
panel控件:Panel
窗体控件:Frame
对话框的使用:wx.MessageDialog
#使用消息对话框方法,没有父窗体,所以None,提示信息和框标题分别写下,wx.YES_DEFAULT表示只有一个确定选项的模式, # wx.ICON_QUESTION表示询问模式。假如显示模式是点击了yes按钮wx.ID_YES,就销毁==》dlg.Destroy()
#使用消息对话框方法,没有父窗体,所以None,提示信息和框标题分别写下,wx.YES_DEFAULT表示只有一个确定选项的模式,wx.ICON_QUESTION表示询问模式。假如显示模式是点击了yes按钮wx.ID_YES,就销毁==》dlg.Destroy()
if minlen == '':
dlg=wx.MessageDialog(None,'最小长度不能为空','错误信息',wx.YES_DEFAULT|wx.ICON_QUESTION)
if dlg.ShowModal()==wx.ID_YES:
dlg.Destroy()
如何布局设计:逐行添加,平行排列。最后把每一行对应的BoxSizer添加到垂直布局的BoxSizer中
如何循环添加多个BoxSizer布局:
for i in range(1, 8): box = 'boxsizer' + str(i) boxsizerFinale.Add(eval(box))
#使用面型对象编程实现基于GUI框架的自动测试数据的工具
# 导入库文件
import wx
import string,random
# 类的定义
class GUI_test():
# 类的初始化定义,创建所有用到的控件
def __init__(self):
self.app = wx.App()
# 定义框体
self.window = wx.Frame(None, title='约车', size=(600, 500))
# 定义panel
self.panel = wx.Panel(self.window)
# 定义标签
self.lblminlen = wx.StaticText(self.panel, label='最小长度:')
# 定义文本框
self.txtminlen = wx.TextCtrl(self.panel)
# 定义复选框
self.chkup = wx.CheckBox(self.panel, label='包含大写字母')
self.chkblow = wx.CheckBox(self.panel, label='包含小写字母')
self.chkbnum = wx.CheckBox(self.panel, label='包含数字')
self. chkbpnu = wx.CheckBox(self.panel, label='包含符号')
self.chkbno = wx.CheckBox(self.panel, label='包含序号')
self.chkbrexemail = wx.CheckBox(self.panel, label='包含邮箱后缀')
self.chkbfile = wx.CheckBox(self.panel, label='保存到邮件')
# 定义标签
self.lblmaxlen = wx.StaticText(self.panel, label='最大长度:')
# 定义文本框
self.txtmaxlen = wx.TextCtrl(self.panel)
# 定义标签
self. lblfile = wx.StaticText(self.panel, label='文件名及路径')
# 定义文本框
self. extfile = wx.TextCtrl(self.panel)
# 定义标签
self. lblcount = wx.StaticText(self.panel, label='数据总数')
# 定义文本框
self.txtcount = wx.TextCtrl(self.panel)
# 定义按钮
self.buttonOK = wx.Button(self.panel, label='确定')
self.buttonReset = wx.Button(self.panel, label='重置')
# 设置控件布局
def layout(self):
# 设置布局
boxsizer1 = wx.BoxSizer()
boxsizer1.Add(self.lblminlen, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer1.Add(self.txtminlen, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer1.Add( self.lblmaxlen, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer1.Add(self.txtmaxlen, flag=wx.LEFT | wx.RIGHT, border=10)
# 设置第二行水平布局
boxsizer2 = wx.BoxSizer()
boxsizer2.Add(self.chkup, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer2.Add(self.chkblow, flag=wx.LEFT | wx.RIGHT, border=10)
# 设置第3行水平布局
boxsizer3 = wx.BoxSizer()
boxsizer3.Add(self.chkbnum, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer3.Add(self. chkbpnu, flag=wx.LEFT | wx.RIGHT, border=10)
# 设置第4行水平布局
boxsizer4 = wx.BoxSizer()
boxsizer4.Add(self.chkbno, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer4.Add(self.chkbrexemail, flag=wx.LEFT | wx.RIGHT, border=10)
# 设置第5行水平布局
boxsizer5 = wx.BoxSizer()
boxsizer5.Add(self.chkbfile, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer5.Add(self. lblfile, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer5.Add(self. extfile, flag=wx.LEFT | wx.RIGHT, border=10)
# 设置第6行水平布局
boxsizer6 = wx.BoxSizer()
boxsizer6.Add(self. lblcount, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer6.Add(self.txtcount, flag=wx.LEFT | wx.RIGHT, border=10)
# 设置第7行水平布局
boxsizer7 = wx.BoxSizer()
boxsizer7.Add(self.buttonOK, flag=wx.LEFT | wx.RIGHT, border=10)
boxsizer7.Add(self.buttonReset, flag=wx.LEFT | wx.RIGHT, border=10)
# 设置垂直布局
boxsizerFinale = wx.BoxSizer(wx.VERTICAL)
for i in range(1, 8):
box = 'boxsizer' + str(i)
boxsizerFinale.Add(eval(box))
# 设置标签起效
self.panel.SetSizer(boxsizerFinale)
def eventbind(self):
#绑定确定按钮buttonOK对应的事件,self.checkinput表示类里面自己的方法
self.buttonOK.Bind(wx.EVT_BUTTON,self.checkinput)
#绑定重置按钮和重置方法
self.buttonReset.Bind(wx.EVT_BUTTON,self.reset)
# 对界面输入进行校验,不能为空
def checkinput(self,event):
#事件绑定方法一定要写event,固定写法,判断最小长度文本框中输入的内容是否为空
minlen=self.txtminlen.GetValue()
maxlen = self.txtmaxlen.GetValue()
if minlen == '':
#使用消息对话框方法,没有父窗体,所以None,提示信息和框标题分别写下,wx.YES_DEFAULT表示只有一个确定选项的模式,
# wx.ICON_QUESTION表示询问模式。假如显示模式是点击了yes按钮wx.ID_YES,就销毁==》dlg.Destroy()
dlg=wx.MessageDialog(None,'最小长度不能为空','错误信息',wx.YES_DEFAULT|wx.ICON_QUESTION)
if dlg.ShowModal()==wx.ID_YES:
dlg.Destroy()
elif maxlen == '':
dlg=wx.MessageDialog(None,'最大长度不能为空','错误系信息',wx.YES_DEFAULT|wx.ICON_QUESTION)
if dlg.ShowModal()==wx.ID_YES:
dlg.Destroy()
# 判断最小长度不能大于最大程度
elif int(minlen)>=int(maxlen):
dlg=wx.MessageDialog(None,'最小长度不能大于最大长度','错误信息',wx.YES_DEFAULT|wx.ICON_QUESTION)
if dlg.ShowModal()==wx.ID_YES:
dlg.Destroy()
# 符合条件判断才进行调用
if minlen!='' and maxlen!='' and int(minlen)<=int(maxlen):
self.createdata(minlen,maxlen)
# 把界面所有输入内容清空,时间方法必须加入event参数,谨记
def reset(self,event):
self.txtmaxlen.SetValue('')
self.txtminlen.SetValue('')
# 创建测试数据
def createdata(self, minlen,maxlen):
str=''
# 生成指定范围内的随机数
num=random.randint(int(minlen),int(maxlen))
# 默认生成字符串
str=str+string.ascii_letters+string.ascii_letters+string.ascii_letters
# 获取字符串
resultdata=''.join(random.sample(str,num))
print(resultdata)
return resultdata
#运行gui整体框架
def run(self):
# 显示窗体
self.window.Show(True)
# 启动app
self.app.MainLoop()
if __name__ == '__main__':
guiOBJ=GUI_test()
guiOBJ.layout()
# 记得检查是否调用了按钮触发事件,别像我,排查半天。在运行前调用
guiOBJ.eventbind()
guiOBJ.run()