线程优化Python写GUI业务卡顿问题

使用线程的思想去写代码

软件中的线程

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

你可能感兴趣的:(Python)