import wx
import random
import string
import csv
class OOP_Create():
def __init__(self):
self.app=wx.App()
self.window=wx.Frame(None,title="随机数功能",size=(400,300))
self.panel = wx.Panel(self.window)
self.minlenText=wx.StaticText(self.panel,label="最小长度")
self.minlentxt=wx.TextCtrl(self.panel)
self.maxlenText=wx.StaticText(self.panel,label="最大长度")
self.maxlentxt=wx.TextCtrl(self.panel)
self.chkup=wx.CheckBox(self.panel,label="包含大写字母")
self.chklow=wx.CheckBox(self.panel,label="包含小写字母")
self.chknum=wx.CheckBox(self.panel,label="包含数字")
self.chkpnu=wx.CheckBox(self.panel,label="包含符号")
self.chkno = wx.CheckBox(self.panel, label="包含序号")
self.chkemail=wx.CheckBox(self.panel,label="包含邮箱后缀")
self.chkfile=wx.CheckBox(self.panel,label="保存到文件")
self.lblfile=wx.StaticText(self.panel,label="文件名及路径")
self.txtfile=wx.TextCtrl(self.panel)
self.lblcount=wx.StaticText(self.panel,label="数据总数")
self.txtcount=wx.TextCtrl(self.panel,value='1')
self.butOk=wx.Button(self.panel,label="确定")
self.butReset=wx.Button(self.panel,label="重置")
def layout(self):
boxsizer1=wx.BoxSizer()
boxsizer1.Add(self.minlenText, flag=wx.LEFT | wx.TOP, border=10)
boxsizer1.Add(self.minlentxt, flag=wx.LEFT | wx.TOP, border=10)
boxsizer1.Add(self.maxlenText,flag=wx.LEFT | wx.TOP,border=10)
boxsizer1.Add(self.maxlentxt, flag=wx.LEFT | wx.TOP, border=10)
boxsizer2=wx.BoxSizer()
boxsizer2.Add(self.chkup,flag=wx.LEFT|wx.TOP,border=10)
boxsizer2.Add(self.chklow, flag=wx.LEFT | wx.TOP, border=10)
boxsizer3=wx.BoxSizer()
boxsizer3.Add(self.chknum,flag=wx.LEFT|wx.TOP,border=10)
boxsizer3.Add(self.chkpnu, flag=wx.LEFT | wx.TOP, border=10)
boxsizer4=wx.BoxSizer()
boxsizer4.Add(self.chkno,flag=wx.LEFT|wx.TOP,border=10)
boxsizer4.Add(self.chkemail, flag=wx.LEFT | wx.TOP, border=10)
boxsizer5=wx.BoxSizer()
boxsizer5.Add(self.chkfile,flag=wx.LEFT|wx.TOP,border=10)
boxsizer5.Add(self.lblfile, flag=wx.LEFT | wx.TOP, border=10)
boxsizer5.Add(self.txtfile, flag=wx.LEFT | wx.TOP, border=10)
boxsizer6=wx.BoxSizer()
boxsizer6.Add(self.lblcount,flag=wx.LEFT|wx.TOP,border=10)
boxsizer6.Add(self.txtcount,flag=wx.LEFT|wx.TOP,border=10)
boxsizer7=wx.BoxSizer()
boxsizer7.Add(self.butOk,flag=wx.LEFT|wx.TOP,border=10)
boxsizer7.Add(self.butReset,flag=wx.LEFT|wx.TOP,border=10)
boxsizerFinal=wx.BoxSizer(wx.VERTICAL)
for i in range(1,8):
box="boxsizer"+str(i)
boxsizerFinal.Add(eval(box))
self.panel.SetSizer(boxsizerFinal)
def eventbind(self):
self.butOk.Bind(wx.EVT_BUTTON, self.checkinput)
self.butReset.Bind(wx.EVT_BUTTON, self.reset)
def reset(self, event):
self.minlentxt.SetValue("")
self.maxlentxt.SetValue("")
self.chkup.SetValue(False)
self.chklow.SetValue(False)
self.chknum.SetValue(False)
self.chkpnu.SetValue(False)
self.chkno.SetValue(False)
self.chkemail.SetValue(False)
self.chkfile.SetValue(False)
def checkinput(self,event):
strtmp = ""
self.checklen()
chkresult=self.nonmethod()
number=self.checknumber()
for i in range(1,number+1):
if chkresult==0 and number!=0:
resultdata=self.createdata()
strtmp=strtmp+resultdata+"\n"
print(strtmp)
if self.chkfile.GetValue()==False:
self.showdata(strtmp)
else:
self.savefile(strtmp)
elif chkresult==1 and number!=0:
resultdata=self.createdatamethod(i)
strtmp=strtmp+resultdata+"\n"
print(strtmp)
if self.chkfile.GetValue()==False:
self.showdata(strtmp)
else:
self.savefile(strtmp)
def checklen(self):
self.minlen=self.minlentxt.GetValue()
self.maxlen=self.maxlentxt.GetValue()
if (self.minlen==""):
dlg=wx.MessageDialog(None,"最小长度不能为空","错误信息",wx.YES_DEFAULT | wx.ICON_QUESTION)
if dlg.ShowModal()==wx.ID_YES:
dlg.Destroy()
return (0)
elif (self.maxlen==""):
dlg=wx.MessageDialog(None,"最大长度不能为空","错误信息",wx.YES_DEFAULT | wx.ICON_QUESTION)
if dlg.ShowModal()==wx.ID_YES:
dlg.Destroy()
return (0)
elif (int(self.minlen)>int(self.maxlen)):
dlg=wx.MessageDialog(None,"最小长度不能大于最大长度","错误信息",wx.YES_DEFAULT | wx.ICON_QUESTION)
if dlg.ShowModal()==wx.ID_YES:
dlg.Destroy()
return (0)
def nonmethod(self):
self.chklist=[]
if self.chkup.GetValue()==True:
self.chklist.append('up')
if self.chklow.GetValue()==True:
self.chklist.append('low')
if self.chknum.GetValue()==True:
self.chklist.append('num')
if self.chkpnu.GetValue()==True:
self.chklist.append('pnu')
if self.chkno.GetValue()==True:
self.chklist.append('no')
if self.chkemail.GetValue()==True:
self.chklist.append('email')
print(self.chklist)
if len(self.chklist)==0:
return (0)
else:
return (1)
def createdata(self):
num=random.randint(int(self.minlen),int(self.maxlen))
print("数量为",num)
str=""
str=str+string.ascii_letters+string.ascii_letters+string.ascii_letters+string.ascii_letters
resultdata=''.join(random.sample(str,num))
return resultdata
def createdatamethod(self,number):
rexemail = ['@51testing.com', '@126.com', '@163.com', '@sina.com', '@sohu.com', '@qq.com']
strtmp = ""
self.no = number
if 'up' in self.chklist:
strtmp=strtmp+string.ascii_uppercase+string.ascii_uppercase+string.ascii_uppercase+string.ascii_uppercase+string.ascii_uppercase
if 'low' in self.chklist:
strtmp=strtmp+string.ascii_lowercase+string.ascii_lowercase+string.ascii_lowercase+string.ascii_lowercase+string.ascii_lowercase
if 'num' in self.chklist:
strtmp=strtmp+string.digits+string.digits+string.digits+string.digits+string.digits+string.digits+string.digits
if 'pnu' in self.chklist:
strtmp=strtmp+string.punctuation+string.punctuation+string.punctuation+string.punctuation+string.punctuation+string.punctuation
num=random.randint(int(self.minlen),int(self.maxlen))
if strtmp!='':
resultdata=''.join(random.sample(strtmp,num))
else:
# 如果其他条件都没有选择,默认调用生成字母串
resultdata = self.createdata()
if 'no' in self.chklist:
resultdata = str(self.no) + resultdata
print("xuhao", resultdata)
if 'email' in self.chklist:
eml=random.choice(rexemail)
resultdata=resultdata+eml
return resultdata
def checknumber(self):
if self.txtcount.GetValue()=='' or int(self.txtcount.GetValue())<1:
dlg = wx.MessageDialog(None, "数据总数不能为空", "错误信息", wx.YES_DEFAULT | wx.ICON_QUESTION)
if dlg.ShowModal() == wx.ID_YES:
dlg.Destroy()
return (0)
else:
number=int(self.txtcount.GetValue())
return number
def showdata(self, resultdata):
self.windownew = wx.Frame(None, title="显示测试数据", size=(400, 300))
# 窗口中创建一个panel
self.panelnew = wx.Panel(self.windownew)
# 再定义一个多行文本框
wx.TextCtrl(self.panelnew, value=resultdata, style=wx.TE_MULTILINE, size=(400, 300))
self.windownew.Show(True)
def savefile(self,resultdata):
filetmp = self.txtfile.GetValue()
if (filetmp==""):
dlg = wx.MessageDialog(None, "请输入文件名及路径", "错误信息", wx.YES_DEFAULT | wx.ICON_QUESTION)
if dlg.ShowModal() == wx.ID_YES:
dlg.Destroy()
return (0)
else:
file = open(filetmp, "w", newline="")
write = csv.writer(file)
print("传入文件中的内容", resultdata)
tmp = resultdata.split("\n")
for element in tmp:
print(element)
write.writerow([element])
file.close()
def run(self):
self.window.Show(True)
self.app.MainLoop()
if __name__ == '__main__':
OOP_CreateObj=OOP_Create()
OOP_CreateObj.layout()
OOP_CreateObj.eventbind()
OOP_CreateObj.run()
