我课余学的是Python,在GUI编程方面,Python确实没有想C#和VB一样那么方便,但是由于项目需要的并不是很复杂的GUI界面以及业务处理,考虑到Python在数据处理方面的优越性,所以就用了Python写GUI界面,刚开始的时候写一些简单的业务逻辑还是算比较正常的,但是在写注册、登录、业务单循环等功能的时候,出现了卡顿,后来在网上找了一些解决办法,有加定时器的,有用线程的,而我就是采用了线程的思想去解决这个问题。话不多说,直接上代码
**#***************************************************************************************""" ''' * @brief :将任务函数打包进线性执行 * @param : * @func :function_name * @*args : the params of your function which you need to package * @note : null * @return: null ''' def thread_pack(func,*args): t = threading.Thread(target=func,args=args) #守护进程 t.setDaemon(True) #启动进程 t.start()**
代码解释:这里用的可能比较简单,首先就是创建一个线程,target参数就是线程要去执行的业务函数,args就是这个业务函数可能需要用到的参数,可以传多个进来,最后就是对线程进行守护和启动。下面给一个调用的例子:
btn3_quit = tkinter.Button(win, text="退出系统", bg="red", fg="#87CEEB", command=lambda: event.thread_pack(win.destroy)) btn4_help = tkinter.Button(win, text="使用帮助", bg="red", fg="#87CEEB", command=lambda: event.thread_pack(event.button_Event.Help)) btn_mail = tkinter.Button(win,text="发送数据至邮箱", bg="#B4EEB4", fg="#0A0A0A", command = lambda: event.thread_pack(event.button_Event.senddata_mail)) btn_message = tkinter.Button(win, text="发送数据至手机", bg="#B4EEB4", fg="#0A0A0A", command=lambda: event.thread_pack(event.button_Event.senddata_mail, win)) btn_show_data = tkinter.Button(win,text="显示数据", bg="#B4EEB4", fg="#0A0A0A", command=lambda: event.thread_pack(event.button_Event.show_data, win))
我把常用的业务函数写进了event.py里面,代用的时候直接把业务函数放进thread_pack()进行打包,参数放在后面,这里我用的是 command=lambda:function的方法对按钮的事件进行绑定。
到最后还有一个问题就是这种方法在写登录的时候有个bug,你点击登录按钮之后,用线程去做登录验证,原本的逻辑就是如果验证成功就将登录窗口毁掉,启动主窗口,但是在这里用线程之后就不能关闭登录窗口。
“” Python纯属是我的业余,社会代码勿扰""