研发基于GUI的随机数据生成工具(V4.0完整版:设置新窗口显示数据并写入文本文件)
生活随笔
收集整理的這篇文章主要介紹了
研发基于GUI的随机数据生成工具(V4.0完整版:设置新窗口显示数据并写入文本文件)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#V4.0完整版
#導入相關的類庫文件
import random
import string
import wx
import csv
class test_tool_GUI_v4():#類的初始化方法,創建所有的控件def __init__(self):self.app=wx.App()self.window=wx.Frame(None,title="測試數據生成工具",size=(400,400))self.panel=wx.Panel(self.window)#定義標簽self.minbq=wx.StaticText(self.panel,label="最小長度")#定義文本框self.mintxt=wx.TextCtrl(self.panel)#定義標簽2self.maxbq=wx.StaticText(self.panel,label="最大長度")#定義文本框2self.maxtxt=wx.TextCtrl(self.panel)#定義標簽3self.wenjianbq=wx.StaticText(self.panel,label="文件名及路徑")#定義文本框3self.wenjiantxt=wx.TextCtrl(self.panel)#定義標簽4self.shujubq=wx.StaticText(self.panel,label="數據總數")#定義文本框4self.shujutxt=wx.TextCtrl(self.panel)#定義復選框self.daxue=wx.CheckBox(self.panel,label="包含大寫字母")self.xiaoxue=wx.CheckBox(self.panel,label="包含小寫字母")self.shuzi=wx.CheckBox(self.panel,label="包含數字")self.fuhao=wx.CheckBox(self.panel,label="包含符號")self.xuhao=wx.CheckBox(self.panel,label="包含序號")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="重置")#設置布局BoxSizerdef boxsizer(self):#設置一個水平的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)#設置第二個水平的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)#設置第三個水平的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)# 設置第四個水平的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)# 設置第五個水平的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)# 設置第六個水平的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)# 設置第七個水平的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)#設置一個垂直的boxsizerboxsizer8=wx.BoxSizer(wx.VERTICAL)for i in range(1,8):box="boxsizer"+str(i)boxsizer8.Add(eval(box))#讓boxsizer生效self.panel.SetSizer(boxsizer8)#設置新窗口顯示數據def show_window(self,list):str=""self.windownew=wx.Frame(None,title="測試數據",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)#校驗輸入長度的最小值與最大值def check_len(self):# 獲取控件中輸入的內容self.min=self.mintxt.GetValue()self.max=self.maxtxt.GetValue()# 當為空if self.min=="":#給出提示不能為空a=wx.MessageDialog(None,"最小長度不能為空", "錯誤信息",wx.YES_DEFAULT|wx.ICON_QUESTION)# 點擊確定if a.ShowModal()==wx.ID_YES:#對話框關閉a.Destroy()elif self.max=="":#給出提示不能為空a=wx.MessageDialog(None,"最大長度不能為空", "錯誤信息",wx.YES_DEFAULT|wx.ICON_QUESTION)#點擊確定if a.ShowModal()==wx.ID_YES:# 對話框關閉a.Destroy()elif int(self.min)>int(self.max):#提示最小長度不能大于最大長度a=wx.MessageDialog(None,"最小長度不能大于最大長度","錯誤信息", wx.YES_DEFAULT|wx.ICON_QUESTION)#點擊確定if a.ShowModal()==wx.ID_YES:# 對話框關閉a.Destroy()else:return 1#校驗復選框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,"前四項至少選擇一項!","提示信息",wx.YES_DEFAULT|wx.ICON_QUESTION)# 點擊確定if a.ShowModal() == wx.ID_YES:# 對話框關閉a.Destroy()elif self.list==["xuhao"]:a=wx.MessageDialog(None, "前四項至少選擇一項!", "提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)# 點擊確定if a.ShowModal() == wx.ID_YES:# 對話框關閉a.Destroy()elif self.list==["youxiang"]:a=wx.MessageDialog(None,"前四項至少選擇一項!", "提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)# 點擊確定if a.ShowModal() == wx.ID_YES:# 對話框關閉a.Destroy()elif self.list==["xuhao","youxiang"]:a=wx.MessageDialog(None,"前四項至少選擇一項!","提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)# 點擊確定if a.ShowModal() == wx.ID_YES:# 對話框關閉a.Destroy()else:return 1#校驗文件名及路徑是否存在并保存數據def savefile(self,list):#判斷路徑及文件名是否存在filename=self.wenjiantxt.GetValue()if filename=="":#彈出提示a=wx.MessageDialog(None,"請輸入文件名及路徑","提示信息", 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("傳入文件中的內容",list)for row in list:w.writerow([row])file.close()else :#彈出提示a=wx.MessageDialog(None,"請輸入正確的文件名及路徑","提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)if a.ShowModal()==wx.ID_YES:a.Destroy()return 0#校驗輸入的數量def check_num(self):if self.shujutxt.GetValue()=="" or int(self.shujutxt.GetValue())<1:#彈出提示a=wx.MessageDialog(None,"請輸入大于1的整數","提示信息", wx.YES_DEFAULT|wx.ICON_QUESTION)if a.ShowModal()==wx.ID_YES:a.Destroy()return 0else:number=int(self.shujutxt.GetValue())return number#根據選擇條件創建測試數據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))#增加一個序號if "xuhao" in self.list:result=str(xuhao)+resultif "youxiang" in self.list:#任意取一個郵箱后綴email=random.choice(youxiang)result=result+email#print(result2)return result#調用界面校驗結果def check_input(self,event):list=[]#獲取長度校驗結果a=self.check_len()if a==None:return 0else:#獲取復選框校驗結果result=self.xuanze()if result==None:return 0else:#獲取輸入數量校驗結果number=self.check_num()if number==None:return 0else:for i in range(1,number+1):data=self.createdata(i)list.append(data)#調用新窗口顯示數據if self.baocun.GetValue()==False:self.show_window(list)#調用校驗文件名及路徑是否存在并保存數據else:self.savefile(list)#重置文本框def reset(self,event):# 提示是否清空文本框a=wx.MessageDialog(None,"是否清空文本框","提示信息",wx.YES_NO|wx.ICON_QUESTION)#點擊"是"if a.ShowModal()==wx.ID_YES:#清空文本框self.mintxt.SetValue("")self.maxtxt.SetValue("")self.wenjiantxt.SetValue("")self.shujutxt.SetValue("")#清空勾選項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)# 對話框關閉a.Destroy()#點擊“否”else:#對話框關閉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()# 運行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()
總結
以上是生活随笔為你收集整理的研发基于GUI的随机数据生成工具(V4.0完整版:设置新窗口显示数据并写入文本文件)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPS人员定位系统:一种更安全高效的人员
- 下一篇: 认识Makefile文件(什么作用,格式