本文来源吾爱破解论坛
程序功能: xxxxxxxxxxx.png (48.83 KB, 下载次数: 0)
下载附件
保存到相册
1.点击功能键;
2.实时回显输出;
3.清除数据功能;
4.未做日志记录。
运行如图:
代码如下:并未作出优化。
优化可参考链接 https://www.cnblogs.com/hhh5460/p/5188524.html
[Python] 纯文本查看 复制代码
#!/usr/bin/python # -*- coding: UTF-8 -*- # tkinter_main.py from tkinter import * from tkinter import simpledialog, filedialog, messagebox import operator, time, subprocess, sys, os, threading, datetime #from PIL import ImageTk, Image top = Tk() class Application_Mian(Frame): def __init__(self): # 主框架 """ 在GUI中,每个Button、Label、输入框等,都是一个Widget(控件)。在tkinter中用Frame表示窗口,Frame也是一个Widget,Frame可以容纳其它Widget。本程序中从Frame类派生出Application类,来容纳各种Widget。 Application类的构造函数 __init__(self,master=None)有两个参数,self代表Application本身,(在tkinter中,一个Widget可能属于另一个Widget,这时的另一个Widget就是这个控件的master)而窗口没有master,所以在这里master=None。 geometry('800x430')表示将窗口大小设为“800x430”大小,self.createWidgets()是创建Widgets的方法,具体在后面。 resizable(0, 0)表示不允许调节窗口大小,将参数设为1则表示允许调节。 """ Frame.__init__(self, master=None) image_bm = PhotoImage(file='image/background.png') self.master.geometry('1024x568') # 设置程序启动默认大小 self.master.resizable(width=False, height=False) # 宽不可变, 高可变,默认为True # Label(self.master,image=image_bm) self.createWidgets() def createWidgets(self): '''增加菜单 # tearoff的值有0和1,为0时表示子菜单不独立出来。) # add_cascade:添加下拉菜单 ''' self.menuBar = Menu(self.master) ##创建菜单的实例 self.master.config(menu=self.menuBar,bg='#CDCDB4') # 将根窗口的顶级菜单设置为menu # 设置菜单选项 # 创建一个下拉菜单‘关于’,这个菜单是挂在menubar(顶级菜单)上的 # tearoff的值有0和1,为0时表示子菜单不独立出来。 aboutMenu = Menu(self.menuBar, tearoff=0) # 创建一个下拉菜单‘功能’,这个菜单是挂在menubar(顶级菜单)上的 moreMenu = Menu(self.menuBar, tearoff=0) # 创建一个下拉菜单‘预留功能1-4’,这个菜单是挂在menubar(顶级菜单)上的 ReserveMenu1 = Menu(self.menuBar, tearoff=0) ReserveMenu2 = Menu(self.menuBar, tearoff=0) ReserveMenu3 = Menu(self.menuBar, tearoff=0) ReserveMenu4 = Menu(self.menuBar, tearoff=0) # add_cascade:添加下拉菜单 self.menuBar.add_cascade(label='程序预留1', menu=ReserveMenu1) self.menuBar.add_cascade(label='程序预留2', menu=ReserveMenu2) self.menuBar.add_cascade(label='程序预留3', menu=ReserveMenu3) self.menuBar.add_cascade(label='程序预留4', menu=ReserveMenu4) self.menuBar.add_cascade(label='功能', menu=moreMenu) self.menuBar.add_cascade(label='帮助', menu=aboutMenu) # 下拉菜单的具体项目,使用add_command()方法 aboutMenu.add_command(label='关于', command=self.AboutMenu) aboutMenu.add_command(label='退出', command=self.QuitMenu) moreMenu.add_command(label='其他', command=self.OtherMenu) # 预留按钮下拉框 # ReserveMenu1 ReserveMenu1.add_command(label='程序预留1', command=self.ReserveMenu) ReserveMenu1.add_command(label='程序预留2', command=self.ReserveMenu) ReserveMenu1.add_command(label='程序预留3', command=self.ReserveMenu) ReserveMenu1.add_command(label='程序预留4', command=self.ReserveMenu) # ReserveMenu2 ReserveMenu2.add_command(label='程序预留1', command=self.ReserveMenu) ReserveMenu2.add_command(label='程序预留2', command=self.ReserveMenu) ReserveMenu2.add_command(label='程序预留3', command=self.ReserveMenu) ReserveMenu2.add_command(label='程序预留4', command=self.ReserveMenu) # ReserveMenu3 ReserveMenu3.add_command(label='程序预留1', command=self.ReserveMenu) ReserveMenu3.add_command(label='程序预留2', command=self.ReserveMenu) ReserveMenu3.add_command(label='程序预留3', command=self.ReserveMenu) ReserveMenu3.add_command(label='程序预留4', command=self.ReserveMenu) # ReserveMenu4 ReserveMenu4.add_command(label='程序预留1', command=self.ReserveMenu) ReserveMenu4.add_command(label='程序预留2', command=self.ReserveMenu) ReserveMenu4.add_command(label='程序预留3', command=self.ReserveMenu) ReserveMenu4.add_command(label='程序预留4', command=self.ReserveMenu) # 显示面板 self.result = StringVar() self.result.set('执行结果') self.result2 = StringVar() self.result2.set('执行回显界面') # 显示面板设置 #执行结果 # #执行回显界面记录 # --------------------------------------------------------------------------------------------- self.listbox1=Listbox(self.master,font=('微软雅黑', 10), bg='#CDCDB4', bd='0', fg='#828282',state=NORMAL) #下拉柱 self.scrollbar_listbox1 = Scrollbar(self.listbox1) self.scrollbar_listbox1.pack(side=RIGHT, fill=Y) self.listbox1['yscrollcommand'] = self.scrollbar_listbox1.set self.listbox1.place( y=45, width=600, height=520) self.scrollbar_listbox1['command'] = self.listbox1.yview #--------------------------------------------------------------------------------------------- # 日志记录 #--------------------------------------------------------------------------------------------- self.listbox2=Listbox(self.master,font=('微软雅黑', 10), bg='#CDCDB4', bd='0', fg='#828282',state=NORMAL) #下拉柱 self.scrollbar_listbox2 = Scrollbar(self.listbox2) self.scrollbar_listbox2.pack(side=RIGHT, fill=Y) self.listbox2['yscrollcommand'] = self.scrollbar_listbox2.set self.listbox2.place(x=610, y=45, width=390, height=520) self.scrollbar_listbox2['command'] = self.listbox2.yview #--------------------------------------------------------------------------------------------- """ # 不带括号调用的结果:<function bracket at 0x0000000004DD0B38>,a是整个函数体,是一个函数对象,不须等该函数执行完成 # 带括号调用的结果:6 ,b是函数执行后返回的值6,须等该函数执行完成的结果 """ self.Button1 = Button(self.master, text='功能键1', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2, command=lambda: self.thread_it( self.pressNum1), relief='raised') self.Button1.place(x=10, y=10, width=60, height=30) self.Button1 = Button(self.master, text='功能键2', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2, command=lambda: self.thread_it(self.pressNum2), relief='raised') self.Button1.place(x=75, y=10, width=60, height=30) self.Button1 = Button(self.master, text='功能键3', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda: self.thread_it(self.pressNum3), relief='raised') self.Button1.place(x=140, y=10, width=60, height=30) self.Button1 = Button(self.master, text='功能键4', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda: self.thread_it(self.pressNum4), relief='raised') self.Button1.place(x=205, y=10, width=60, height=30) self.Button1 = Button(self.master, text='功能键5', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda: self.thread_it(self.pressNum5), relief='sunken') self.Button1.place(x=270, y=10, width=60, height=30) # 第二排功能键 self.Button1 = Button(self.master, text='功能键6', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda: self.thread_it(self.pressNum6), relief='sunken') self.Button1.place(x=335, y=10, width=60, height=30) self.Button1 = Button(self.master, text='功能键7', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda: self.thread_it(self.pressNum7), relief='groove') self.Button1.place(x=400, y=10, width=60, height=30) self.Button1 = Button(self.master, text='功能键8', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda: self.thread_it(self.pressNum8), relief='groove') self.Button1.place(x=465, y=10, width=60, height=30) self.Button1 = Button(self.master, text='功能键9', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda:self.thread_it(self.pressNum9), relief='ridge') self.Button1.place(x=530, y=10, width=60, height=30) self.Button1 = Button(self.master, text='清除数据', font=('微软雅黑', 10), fg=('#4F4F4F'), bg=('#FFFFF0'), bd=2,command=lambda: self.thread_it(self.Clr), relief='ridge') self.Button1.place(x=605, y=10, width=60, height=30) self.Clock_func = Label(self.master,text="%s" % (datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')),bg='#CDCDB4') self.Clock_func.place(x=700, y=10, width=300, height=30) self.Clock_func.after(1000, self.Clock) #----------------------------------------------------------------- def AboutMenu(self): messagebox.showinfo('关于', 'xxxxxx工具合集 \n \nQQ:xxxxxxx\n') def QuitMenu(self): messagebox.showinfo('退出', ' 暂时没有退出功能\n emmmm...') def OtherMenu(self): messagebox.showinfo('功能', ' 暂时没有其他功能\n emmmm...') def ReserveMenu(self): messagebox.showinfo('程序预留massage', """暂时没有其他功能\n emmmm...\n http://www.sevenday.cf """) #数据预存处理,按键后二次操作 def Data_pre_processing(self,PressMenu): current_time = self.get_current_time() # for i in range(10): logmsg_in = str(current_time) + " " + PressMenu + ("执行完成") +"\n" # 换行 #print("logggggggs Data_pre_processing ",logmsg_in) self.listbox2.insert(END, logmsg_in) #实时回显方法 def Echo_in_real_time(self, bat_func): current_time = self.get_current_time() pi = subprocess.Popen(bat_func, shell=True, stdout=subprocess.PIPE) for i in iter(pi.stdout.readline, 'b'): time.sleep(0.3) if not i: break logmsg_in = str(current_time) + " " + str(i.decode('gbk')) + "\n" # 换行 self.listbox1.insert(END, logmsg_in) #时间戳 def get_current_time(self): current_time = time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())) return current_time def Clock(self): self.Clock_func["text"] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') self.Clock_func.after(1000, self.Clock) #--------------------------------------------------------------------------------------- # 功能键1 def pressNum1(self): #messagebox.showinfo('功能1', ' 正在执行操作...') self.Echo_in_real_time("%cd%/bat/text1.bat") self.Data_pre_processing("按键1") # 功能键2 def pressNum2(self): #messagebox.showinfo('功能2', ' 正在执行操作...') self.Echo_in_real_time("%cd%/bat/2.seting_IE_ActiveX_open.bat") self.Data_pre_processing("按键2") # 功能键3 def pressNum3(self): #messagebox.showinfo('功能3', ' 暂时没有其他功能\n emmmm...') self.Data_pre_processing("按键3") # 功能键4 def pressNum4(self): #messagebox.showinfo('功能4', ' 暂时没有其他功能\n emmmm...') self.Data_pre_processing("按键4") # 功能键5 def pressNum5(self): #messagebox.showinfo('功能5', ' 暂时没有其他功能\n emmmm...') self.Data_pre_processing("按键5") # 功能键6 def pressNum6(self): #messagebox.showinfo('功能6', ' 暂时没有其他功能\n emmmm...') self.Data_pre_processing("按键6") # 功能键7 def pressNum7(self): #messagebox.showinfo('功能7', ' 暂时没有其他功能\n emmmm...') self.Data_pre_processing("按键7") # 功能键8 def pressNum8(self): # messagebox.showinfo('功能8', ' 暂时没有其他功能\n emmmm...') self.Data_pre_processing("按键8") #功能键9 def pressNum9(self): # messagebox.showinfo('功能9', ' 暂时没有其他功能\n emmmm...') self.Data_pre_processing("按键9") #清除记录 def Clr(self): # app.result_set('等待程序输出...') # 将运算结果显示到屏幕1 # app.result2_set('归零中...') # 将运算过程显示到屏幕2 # lists.clear() # 清空列表内容 # messagebox.showinfo('Zeroing...', 'Zeroing... \n Please wait....') time.sleep(0.3) self.listbox1.delete(0,END) # self.listbox2.set('') self.Data_pre_processing("清除记录") messagebox.showinfo('清除记录', '回显界面清理成功\n 请继续使用....') # 打包进线程(耗时的操作) @staticmethod def thread_it(func, *args): t = threading.Thread(target=func, args=args) t.setDaemon(True) # 守护--就算主界面关闭,线程也会留守后台运行(不对!) t.start() # 启动 # t.join() # 阻塞--会卡死界面! # 实例化Application()类 app = Application_Mian() # 设置窗口标题: app.master.title('xxxxxx工具合集') # 主消息循环: app.mainloop()
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。