我写了个gui,通过点击按钮调用多个函数爬虫,但是点击后页面就无反应,直到函数执行完毕。通过了解我知道需要用多线程解决,于是我找了个源码修改,将我的源码加入替换,但是还是出现无反应的情况。我发现当按钮调用一个简单的函数时可以正常执行,但是调用我的函数就会出现卡住的情况。
首先定义了一个class main( )
下面定义了一个def init(self) 里面定义了一系列变量并且global 用以被别的函数调用
init后面定义了一系列函数互相调用(这些函数不在init里)。
当按钮调用我的主函数时就会卡死,于是我写了个打印1到10000的函数,间隔1秒,当调用这个函数时gui界面正常。
请问是哪里出的问题?
python tkinter多线程问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 通常,点击按钮起一个线程的话,会在线程启动后禁用该按钮,线程结束后取消按钮禁用。根据你的需求,我写了一个例子,仅供参考。有兴趣的话,也可以参考我的这篇博客:
Tkinter:实用至上主义的经典之作_天元浪子的博客-CSDN博客_tkinter好用吗 相较于wx或Qt多如牛毛的控件和组件,Tk只用十几个控件就可以满足几乎所有的应用需求,用最低的学习成本、最简单的方式解决问题,这不正是实用至上主义的典范吗?从实用主义的角度看,Qt的博大精深就是尾大不掉,Wx的精致严谨就是循规蹈矩。如果你正在寻找一款用于桌面程序设计的GUI库,并且只打算花一个小时学会使用它,那么就请选择Tkinter吧。这款以学习曲线平缓和易于嵌入为特定目标而设计的GUI库,也许正是你苦苦追寻的真爱。 https://xufive.blog.csdn.net/article/details/124514094import time, random import threading from tkinter import * class MyApp(Tk): """继承Tk,创建自己的桌面应用程序类""" def __init__(self): """构造函数""" super().__init__() self.title('下载任务管理器') self.geometry('320x160') #self.iconbitmap('res/Tk.ico') self.info = StringVar() # 创建一个字符串变量对象 self.info.set('等待下载') # 置初值 label = Label(self, textvariable=self.info, font=("Arial Bold", 20)) # 将Label和整型变量对象关联 label.pack(side='left', expand='yes', fill='both', padx=5, pady=5) self.btn = Button(self, text='点击开始', bg='#90F0F0') self.btn.pack(side='right', anchor='center', fill='y', padx=5, pady=5) self.btn.bind(sequence='<Button-1>', func=self.on_button) # 绑定事件和事件函数 def on_button(self, evt): """点击按钮事件的响应函数, evt是事件对象""" if self.btn['state'] != 'disabled': self.btn['state'] = 'disabled' self.info.set('开始下载。。。') args = list() kwds = dict() th = threading.Thread(target=self.func_threading, args=args, kwargs=kwds) th.setDaemon(True) th.start() def func_threading(self, *args, **kwds): """线程函数,参数可随意设置。以下代码模拟多个下载任务""" for task in ['url_1', 'url_2', 'url_3']: time.sleep(random.random()*3+0.5) # 随机延时0.5~3.5秒,模拟单个站点下载 self.info.set('%s下载成功'%task) self.info.set('下载完成') self.btn['state'] = 'normal' if __name__ == '__main__': app = MyApp() app.mainloop()
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 防火墙的混合模式配置
- ¥15 Ubuntu不小心注销了要怎么恢复啊
- ¥15 安装powerbuilder10卡在安装程序正在运行这个页面 没有下一步任何指令
- ¥15 关于mpi的问题:请问遇到这种情况需要怎么解决,出现这个问题后电脑不能进行mpi多核运行只能进行单核运行
- ¥50 微信聊天记录备份到电脑提示成功了,但还是没同步到电脑微信
- ¥15 python怎么在已有视频文件后添加新帧
- ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
- ¥15 fluent里模拟降膜反应的UDF编写
- ¥15 MYSQL 多表拼接link
- ¥15 关于某款2.13寸墨水屏的问题