研发基于GUI的随机数据生成工具(V4.0完整版:设置新窗口显示数据并写入文本文件)
生活随笔
收集整理的這篇文章主要介紹了
研发基于GUI的随机数据生成工具(V4.0完整版:设置新窗口显示数据并写入文本文件)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#V4.0完整版
#導(dǎo)入相關(guān)的類庫(kù)文件
import random
import string
import wx
import csv
class test_tool_GUI_v4():#類的初始化方法,創(chuàng)建所有的控件def __init__(self):self.app=wx.App()self.window=wx.Frame(None,title="測(cè)試數(shù)據(jù)生成工具",size=(400,400))self.panel=wx.Panel(self.window)#定義標(biāo)簽self.minbq=wx.StaticText(self.panel,label="最小長(zhǎng)度")#定義文本框self.mintxt=wx.TextCtrl(self.panel)#定義標(biāo)簽2self.maxbq=wx.StaticText(self.panel,label="最大長(zhǎng)度")#定義文本框2self.maxtxt=wx.TextCtrl(self.panel)#定義標(biāo)簽3self.wenjianbq=wx.StaticText(self.panel,label="文件名及路徑")#定義文本框3self.wenjiantxt=wx.TextCtrl(self.panel)#定義標(biāo)簽4self.shujubq=wx.StaticText(self.panel,label="數(shù)據(jù)總數(shù)")#定義文本框4self.shujutxt=wx.TextCtrl(self.panel)#定義復(fù)選框self.daxue=wx.CheckBox(self.panel,label="包含大寫字母")self.xiaoxue=wx.CheckBox(self.panel,label="包含小寫字母")self.shuzi=wx.CheckBox(self.panel,label="包含數(shù)字")self.fuhao=wx.CheckBox(self.panel,label="包含符號(hào)")self.xuhao=wx.CheckBox(self.panel,label="包含序號(hào)")self.youxiang= wx.CheckBox(self.panel,label="包含郵箱后綴")self.baocun=wx.CheckBox(self.panel,label="保存到文件")#定義按鍵self.queding=wx.Button(self.panel,label="確定")self.chongzhi=wx.Button(self.panel,label="重置")#設(shè)置布局BoxSizerdef boxsizer(self):#設(shè)置一個(gè)水平的BoxSizerboxsizer1=wx.BoxSizer()boxsizer1.Add(self.minbq,flag=wx.EXPAND|wx.LEFT|wx.TOP,border=15)boxsizer1.Add(self.mintxt,flag=wx.LEFT|wx.TOP,border=15)boxsizer1.Add(self.maxbq,flag=wx.EXPAND|wx.LEFT|wx.TOP,border=15)boxsizer1.Add(self.maxtxt,flag=wx.LEFT|wx.TOP,border=15)#設(shè)置第二個(gè)水平的BoxSizerboxsizer2=wx.BoxSizer()boxsizer2.Add(self.daxue,flag=wx.LEFT|wx.TOP,border=15)boxsizer2.Add(self.xiaoxue,flag=wx.LEFT|wx.TOP, border=15)#設(shè)置第三個(gè)水平的BoxSizerboxsizer3=wx.BoxSizer()boxsizer3.Add(self.shuzi,flag=wx.LEFT|wx.TOP,border=15)boxsizer3.Add(self.fuhao,flag=wx.LEFT|wx.TOP,border=15)# 設(shè)置第四個(gè)水平的BoxSizerboxsizer4=wx.BoxSizer()boxsizer4.Add(self.xuhao,flag=wx.LEFT|wx.TOP,border=15)boxsizer4.Add(self.youxiang,flag=wx.LEFT|wx.TOP,border=15)# 設(shè)置第五個(gè)水平的BoxSizerboxsizer5=wx.BoxSizer()boxsizer5.Add(self.baocun,flag=wx.LEFT|wx.TOP,border=15)boxsizer5.Add(self.wenjianbq,flag=wx.LEFT|wx.TOP,border=15)boxsizer5.Add(self.wenjiantxt,flag=wx.LEFT|wx.TOP,border=15)# 設(shè)置第六個(gè)水平的BoxSizerboxsizer6=wx.BoxSizer()boxsizer6.Add(self.shujubq,flag=wx.LEFT|wx.TOP,border=15)boxsizer6.Add(self.shujutxt,flag=wx.LEFT|wx.TOP,border=15)# 設(shè)置第七個(gè)水平的BoxSizerboxsizer7=wx.BoxSizer()boxsizer7.Add(self.queding,flag=wx.LEFT|wx.TOP,border=15)boxsizer7.Add(self.chongzhi,flag=wx.LEFT|wx.TOP,border=15)#設(shè)置一個(gè)垂直的boxsizerboxsizer8=wx.BoxSizer(wx.VERTICAL)for i in range(1,8):box="boxsizer"+str(i)boxsizer8.Add(eval(box))#讓boxsizer生效self.panel.SetSizer(boxsizer8)#設(shè)置新窗口顯示數(shù)據(jù)def show_window(self,list):str=""self.windownew=wx.Frame(None,title="測(cè)試數(shù)據(jù)",size=(600, 600))self.panelnew=wx.Panel(self.windownew)for row in list:str=str+row+"\n"wx.TextCtrl(self.panelnew,value=str,style=wx.TE_MULTILINE,size=(600, 600))self.windownew.Show(True)#校驗(yàn)輸入長(zhǎng)度的最小值與最大值def check_len(self):# 獲取控件中輸入的內(nèi)容self.min=self.mintxt.GetValue()self.max=self.maxtxt.GetValue()# 當(dāng)為空if self.min=="":#給出提示不能為空a=wx.MessageDialog(None,"最小長(zhǎng)度不能為空", "錯(cuò)誤信息",wx.YES_DEFAULT|wx.ICON_QUESTION)# 點(diǎn)擊確定if a.ShowModal()==wx.ID_YES:#對(duì)話框關(guān)閉a.Destroy()elif self.max=="":#給出提示不能為空a=wx.MessageDialog(None,"最大長(zhǎng)度不能為空", "錯(cuò)誤信息",wx.YES_DEFAULT|wx.ICON_QUESTION)#點(diǎn)擊確定if a.ShowModal()==wx.ID_YES:# 對(duì)話框關(guān)閉a.Destroy()elif int(self.min)>int(self.max):#提示最小長(zhǎng)度不能大于最大長(zhǎng)度a=wx.MessageDialog(None,"最小長(zhǎng)度不能大于最大長(zhǎng)度","錯(cuò)誤信息", wx.YES_DEFAULT|wx.ICON_QUESTION)#點(diǎn)擊確定if a.ShowModal()==wx.ID_YES:# 對(duì)話框關(guān)閉a.Destroy()else:return 1#校驗(yàn)復(fù)選框def xuanze(self):self.list=[]#判斷是否沒有選擇任何條件if self.daxue.GetValue()==True:self.list.append("daxue")if self.xiaoxue.GetValue()==True:self.list.append("xiaoxue")if self.shuzi.GetValue()==True:self.list.append("shuzi")if self.fuhao.GetValue()==True:self.list.append("fuhao")if self.xuhao.GetValue()==True:self.list.append("xuhao")if self.youxiang.GetValue()==True:self.list.append("youxiang")if self.list==[]:a=wx.MessageDialog(None,"前四項(xiàng)至少選擇一項(xiàng)!","提示信息",wx.YES_DEFAULT|wx.ICON_QUESTION)# 點(diǎn)擊確定if a.ShowModal() == wx.ID_YES:# 對(duì)話框關(guān)閉a.Destroy()elif self.list==["xuhao"]:a=wx.MessageDialog(None, "前四項(xiàng)至少選擇一項(xiàng)!", "提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)# 點(diǎn)擊確定if a.ShowModal() == wx.ID_YES:# 對(duì)話框關(guān)閉a.Destroy()elif self.list==["youxiang"]:a=wx.MessageDialog(None,"前四項(xiàng)至少選擇一項(xiàng)!", "提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)# 點(diǎn)擊確定if a.ShowModal() == wx.ID_YES:# 對(duì)話框關(guān)閉a.Destroy()elif self.list==["xuhao","youxiang"]:a=wx.MessageDialog(None,"前四項(xiàng)至少選擇一項(xiàng)!","提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)# 點(diǎn)擊確定if a.ShowModal() == wx.ID_YES:# 對(duì)話框關(guān)閉a.Destroy()else:return 1#校驗(yàn)文件名及路徑是否存在并保存數(shù)據(jù)def savefile(self,list):#判斷路徑及文件名是否存在filename=self.wenjiantxt.GetValue()if filename=="":#彈出提示a=wx.MessageDialog(None,"請(qǐng)輸入文件名及路徑","提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)if a.ShowModal()==wx.ID_YES:a.Destroy()return 0elif filename.endswith(".csv"):file=open(filename,"w",newline="")w=csv.writer(file)print("傳入文件中的內(nèi)容",list)for row in list:w.writerow([row])file.close()else :#彈出提示a=wx.MessageDialog(None,"請(qǐng)輸入正確的文件名及路徑","提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)if a.ShowModal()==wx.ID_YES:a.Destroy()return 0#校驗(yàn)輸入的數(shù)量def check_num(self):if self.shujutxt.GetValue()=="" or int(self.shujutxt.GetValue())<1:#彈出提示a=wx.MessageDialog(None,"請(qǐng)輸入大于1的整數(shù)","提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)if a.ShowModal()==wx.ID_YES:a.Destroy()return 0else:number=int(self.shujutxt.GetValue())return number#根據(jù)選擇條件創(chuàng)建測(cè)試數(shù)據(jù)def createdata(self,i):strmp=""xuhao=iyouxiang=["@qq.com","@163.com","@126.com","@sina.com","@sogou.com"]num1=random.randint(int(self.min),int(self.max))#判斷勾選的條件if "daxue" in self.list:strmp=strmp+3*string.ascii_uppercaseif "xiaoxue" in self.list:strmp=strmp+3*string.ascii_lowercaseif "shuzi" in self.list:strmp=strmp+5*string.digitsif "fuhao" in self.list:strmp=strmp+3*string.punctuationresult=''.join(random.sample(strmp,num1))#增加一個(gè)序號(hào)if "xuhao" in self.list:result=str(xuhao)+resultif "youxiang" in self.list:#任意取一個(gè)郵箱后綴email=random.choice(youxiang)result=result+email#print(result2)return result#調(diào)用界面校驗(yàn)結(jié)果def check_input(self,event):list=[]#獲取長(zhǎng)度校驗(yàn)結(jié)果a=self.check_len()if a==None:return 0else:#獲取復(fù)選框校驗(yàn)結(jié)果result=self.xuanze()if result==None:return 0else:#獲取輸入數(shù)量校驗(yàn)結(jié)果number=self.check_num()if number==None:return 0else:for i in range(1,number+1):data=self.createdata(i)list.append(data)#調(diào)用新窗口顯示數(shù)據(jù)if self.baocun.GetValue()==False:self.show_window(list)#調(diào)用校驗(yàn)文件名及路徑是否存在并保存數(shù)據(jù)else:self.savefile(list)#重置文本框def reset(self,event):# 提示是否清空文本框a=wx.MessageDialog(None,"是否清空文本框","提示信息",wx.YES_NO|wx.ICON_QUESTION)#點(diǎn)擊"是"if a.ShowModal()==wx.ID_YES:#清空文本框self.mintxt.SetValue("")self.maxtxt.SetValue("")self.wenjiantxt.SetValue("")self.shujutxt.SetValue("")#清空勾選項(xiàng)self.daxue.SetValue(False)self.xiaoxue.SetValue(False)self.shuzi.SetValue(False)self.fuhao.SetValue(False)self.xuhao.SetValue(False)self.youxiang.SetValue(False)self.baocun.SetValue(False)# 對(duì)話框關(guān)閉a.Destroy()#點(diǎn)擊“否”else:#對(duì)話框關(guān)閉a.Destroy()#將按鈕和事件綁定def event_bind(self):self.queding.Bind(wx.EVT_BUTTON,self.check_input)self.chongzhi.Bind(wx.EVT_BUTTON,self.reset)def run(self):#激活窗體self.window.Show()# 運(yùn)行APPself.app.MainLoop()
if __name__ == '__main__':test_tool_GUI_obj=test_tool_GUI_v4()test_tool_GUI_obj.boxsizer()test_tool_GUI_obj.event_bind()test_tool_GUI_obj.run()
總結(jié)
以上是生活随笔為你收集整理的研发基于GUI的随机数据生成工具(V4.0完整版:设置新窗口显示数据并写入文本文件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GPS人员定位系统:一种更安全高效的人员
- 下一篇: 认识Makefile文件(什么作用,格式