昨天利用python自己写了一个微型服务器,突发奇想用Tkinter写一个GUI界面,并将监听开始的函数绑定到其中的一个button上,但是当我点击开始服务button时,窗口立马陷入无响应状态。搜寻一番发现,是服务器函数中的while循环阻塞了GUI的响应,同理而言,做高I/O操作也一样会面临这种情况,同时用一个线程处理GUI响应与功能函数极易导致资源紧缺,进而导致窗口无响应。
解决方法:
(1)多线程方法
我们利用多线程来分别执行GUI和功能函数是一个非常好的方法,好在python中多线程是极其容易使用的。多线程方法如下:
import threading
t= threading.Thread(target = func)
t.start()
先引入threading包,利用threading.Thread创建线程,func是你需要执行的函数。
(2)分类GUI和功能类
你需要将GUI与功能类分离,具体示例代码如下:
from socket import *
from tkinter import *
import time
import threading
import re
#GUI窗口类
class Control():
#定义GUI界面
def __init__(self, master, fuc):
self.parent = master
self.p