我课余学的是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纯属是我的业余,社会代码勿扰""