关于python tkinter 多线程依然无响应问题

Python学习笔记——用多线程处理界面没有响应的问题 在处理复杂的任务的时候,不能把任务写在UI线程里,需要单独使用线程处理。这一章,我们用线程池处理UI不响应的问题。 阅读详情

今天解决了一个GUI程序的多线程问题。

因为GUI程序在执行高IO操作的时候容易出现假死和无响应的状态,所以需要用到多线程。

但我的程序开了线程之后依然是无响应状态。几次尝试,终于找到问题所在。

1.首先,我的程序中有一个按钮button,点击之后运行函数self.starting

self.my_button = tk.Button(root, text="确定",command= self.starting)

其中self.starting用于启动线程,代码如下:

    def starting(self):
        self.thread = threading.Thread(target=self.download)
        self.thread.setDaemon(True)
        self.thread.start()

2.线程中的target为self.downoad是一个自己定义的函数,用于执行某些功能,一开始的时候我的代码是这样写的

self.thread = threading.Thread(target=self.download(data))

因为download函数需要一个参数,所以我就想当然的将参数写在了创建线程函数中,但是发现依然是卡死,后来我就把参数data删了,用其他的方法传递参数,然后就不再出现卡死现象,至于原因我还没仔细的查过。

可以用一个简单的输出函数来测试一下:

    def download(self):
        print("data");
        time.sleep(5);

 

利用Python多线程优化tkinter界面响应:告别卡顿与无响应 本文详细介绍了如何利用Python多线程技术优化tkinter界面响应,解决界面卡死和无响应问题。通过多线程原理讲解、线程安全更新方法、实战案例演示以及高级技巧分享,帮助开发者提升tkinter应用的流畅度和用户体验。特别针对文件处理、下载管理等常见场景提供了完整代码示例。 阅读详情

相关推荐

Python爬虫requests请求无响应的解决方法

在使用Python进行网络爬取数据时,requests库是一个经常使用的工具。但是,在实际应用中,可能会出现请求无响应的情况。这种情况可能由于网站服务器访问量大、网络延迟、反爬虫策略等多种原因导致。那么,如何解决这个问题呢?本文将详细介绍一些解决方法。以上是解决请求无响应问题的主流方法。在实际使用中,我们可以根据具体情况选择最适合的解决方案。Python爬虫requests请求无响应的解决方法。

. 2745

Tkinter无响应问题解决

3. 过重的计算:不要在GUI程序的主事件循环中进行过重的计算,这会占用大量CPU资源,导致界面无法更新和响应。2. 阻塞函数:不要在GUI程序的主事件循环中调用阻塞函数,这样会导致界面卡死。1. 无限循环:在GUI程序中不要使用无限循环,这会导致界面无法响应。5. 资源耗尽:程序中易出现内存泄漏或其他资源耗尽的情况,这同样可以导致界面无响应。4. 死锁:如果程序中使用了线程,必须小心处理好线程同步,避免出现死锁。5. 将复杂的操作切分为多个步骤,在每一步都刷新界面,给用户响应的机会。

2266

python解决tkinter制作桌面应用会出现卡死问题的解决方法

制作的桌面应用发现老卡死或者无响应,但是后台还在进行执行数据,实际上这是没有更新窗口导致的卡死问题,算是一个bug,但也不是,因为他可以使用。window下长期没有返回结果和动态信息的桌面应用会被系统认定为无响应,故此才出现了应用卡死的问题这个问题也很好解决。首先本篇文章主要讲解的是tkinter的数据更新方式,如果没有安装tkinter库将不可以使用本方法 方法说明 实际上tkinter已经给我们封装了更新窗口的函数,即update函数,在我们使用它进行更新窗口的时候,只需要把窗口对象设置为全局、局部调用

任聪聪的博客 2296

python多线程处理tkinter用户操作的后台事件,解决tkinter界面卡死无响应的问题

文章目录总结 Python在使用tkinter库制作图形化界面的时候,‘点击按钮-事件处理-显示结果’是很常见的操作,当程序遇到一个比较耗时的事件时,界面就会卡死无响应。 问题出现的原因在于图形化界面的本质是一个循环,通过不断刷新界面来实现事件的实时响应和更新,如果有一个事件耗时过长,就会导致循环阻塞,界面无法刷新,窗口就会无响应。那么该如何解决? 这是一个非常简单的界面,当点击按钮时,文本框会自动填入文本 from tkinter import * class Main(): def __in.

qq_51188076的博客 8218

解决python tkinter界面卡死的问题

今天小编就为大家分享一篇解决python tkinter界面卡死的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

篮球比赛24秒计时器改造指南:用Multisim实现可调式倒计时系统

本文详细介绍了如何使用Multisim软件改造篮球比赛24秒计时器,实现可调式倒计时系统。从脉冲信号发生器到声光报警模块,提供了完整的电路设计方案和调试技巧,帮助开发者快速掌握数字电路设计的核心原理,提升体育电子设备开发效率。

wood5的博客 211

利用多线程解决Tkinter,在button事件中执行高io,高耗时操作,窗口无响应问题

    昨天利用python自己写了一个微型服务器,突发奇想用Tkinter写一个GUI界面,并将监听开始的函数绑定到其中的一个button上,但是当我点击开始服务button时,窗口立马陷入无响应状态。搜寻一番发现,是服务器函数中的while循环阻塞了GUI的响应,同理而言,做高I/O操作也一样会面临这种情况,同时用一个线程处理GUI响应与功能函数极易导致资源紧缺,进而导致窗口无响应。解决方法:...

Shaft_的博客 9715

rv1126 SDK编译【2020-0912版本SDK包】

rv1126 sdk 编译

学习记录 1万+

pythontk多线程_Tkinter python多线程(避免“无响应”)

您的应用没有响应,因为您的目标参数在声明时执行,其结果作为目标传递。而且,很明显,因为在GUI的线程中执行code_take_loooong_time时,GUI没有响应。处理它 - 摆脱多余的括号。试试这个代码段:import threadingtry:import tkinter as tkexcept ImportError:import Tkinter as tkclass class_on...

weixin_39790528的博客 1562

CloudCompare实战:5分钟搞定点云数据预处理(含常见格式转换技巧)

本文提供了一套基于CloudCompare的5分钟点云数据预处理实战指南。文章详细讲解了如何利用这款开源工具,快速完成点云数据的格式转换(如LAS转PLY)、统计离群值降噪、体素网格下采样以及交互式裁剪等核心操作,帮助用户高效清理和规整杂乱数据,为后续分析建模奠定基础。

weixin_29207533的博客 475

从防御者视角复盘:用WinArpAttacker和Wireshark在Windows上模拟并检测ARP欺骗攻击

本文详细解析了Windows平台下的ARP欺骗攻击与防御策略,通过WinArpAttacker和Wireshark工具模拟攻击并检测异常流量。文章涵盖实验环境搭建、攻击原理深度解析、流量特征分析及企业级防御方案,帮助安全运维人员全面掌握ARP攻击检测与防护技术。

weixin_30918633的博客 120

python tk界面无响应,解决python tkinter界面卡死的问题

如果点击按钮,运行了一个比较耗时的操作,那么界面会卡死。import tkinter as tkimport timedef onclick(text, i):time.sleep(3)text.insert(tk.END, '按了第{}个按钮\n'.format(i))root = tk.Tk()text = tk.Text(root)text.pack()tk.Button(root, tex...

weixin_28902341的博客 3177

基于单片机控制的开关电源设计

采用开关电源技术和MCU模块,凭借可靠性高、易于调适的特点,可以更高效地发挥出二者的优势,从而实现更好的组合。stm32的起动模式是通过Boot0和Boot1两个管脚的高低电平来决定的,当stm32被供电之后,这两个管脚的电平。在 VCC上,键盘的一头(列线)被连接到 VCC上,而在“0”的编程输出中,则用来进。,在开关管打开的情况下,由输入电力供给电流,感应装置存储   Buck变换器是一种非隔离式的电压转换器[10]整流电路对输入电压进行整流,再经过滤波电路,即Dc电压是直流/直流变换器的直流输入。

QQ1694456187的博客 2307

关于在tkinter在程序运行时无响应的情况的解决办法

刚做了第一个有带窗口的可视化程序,然后就兴致勃勃的去测试,但随着测试的次数增加我发现了一个问题,那便是在程序运行到稍微繁忙一点点的代码操作时便会出现窗口部分无响应,无法操作,强行关闭窗口会提示窗口无响应,就像这样。原理讲解在执行稍微复杂的代码时窗口会无响应的原因主要是因为窗口的代码是在主线程上运行的,遇上稍微复杂的代码时便会被阻塞,阻塞导致窗口页码会无响应,所以就把执行的代码用多线程的方式运行便可以很好地解决这个问题。...

qq_30839171的博客 3404

comsol 多物理场仿真流程-以开关柜为例

1、主要方法 在SolidWorks中对于开关柜的内部与外部结构进行建模,生成能够导入软件计算的3D模型。将SolidWorks中的模型导入comsol软件中,设置参数进行多物理场耦合仿真。 1、具体步骤 删除高压开关柜中对其内部电磁环境无较大影响的结构,如低压测量柜、断路器内部结构等。 导入模型:将厂家提供的3D模型转化为solidworks结构模型。 修复模型:修复已转化模型中转化错误的部分、修复已转化模型中非实体部分、修复已转化模型中重叠实体部分 化简模型:去除过于...

健忘16的博客 7020

大数据分析案例-基于决策树算法构建世界杯比赛预测模型

本项目旨在分析往届世界杯比赛数据,找出规律,最后使用决策树算法构建世界杯比赛预测模型,给出两个球队即可预测胜率,可以给爱看球的小伙伴提供一个参考。本次实验我们使用了2018年及其之前的世界杯比赛数据,通过建立决策树模型,模型准确率为82%,接着我们使用该模型预测了2022年世界杯的5场半决赛及决赛,模型准确率也是接近80%的,说明模型效果还是很不错的。心得与体会:通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。

m0_64336780的博客 1万+

python窗口无响应_嵌入式python中的Tkinter窗口无响应

我在dll(windows7)中嵌入了python解释器(2.7.6),该解释器作为插件加载到具有自己ui的本机主机程序中。Python脚本文件由dll执行,在该脚本文件中stderr被重定向到一个文件,并导入另一个脚本。在这个脚本中(下面的代码)是一个类,它创建Tkinter窗口,并具有write()方法来写入Tkinter文本小部件。Stdout被那个类重定向到它自己。类在线程中运行。在下面的...

weixin_39539684的博客 822

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Python-延迟/阻塞】解决 tkinter 与 sleep 同时使用延迟问题

1.问题描述 当Python程序中同时存在tkinter和time.sleep()时,启动程序进入到listbox.insert时,窗口就一直无响应,所有listbox.insert的内容都会阻塞,要等整个for循环完(也就是所有time.sleep(3)都要执行完)了才会在窗口显示。 2.问题分析 多线程(threading——join) join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后, 才可以接着往下执行,

若如初见 5320

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python | GUI | Tkinter - 4. 多线程以及文件间调用

本文总结如何暂停或继续Tkinter多线程以及多文件间的调用。

MissMango0820的博客 3680

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python线程卡死问题解决_再谈python3的tkinter开发UI界面,多线程解决界面卡死、无响应...

前面的文章已经介绍过两种小技巧,让我们回顾一下,就是:1、在window.mainloop()前一定要加window.after(250) #250ms 用于延迟进行窗体本身的死循环,250毫秒时间可以根据实际情况调整,对于I/O执行时间较长的,可以加到1000毫秒2、在我们按下button,绑定的command要执行的函数体内部,加window.update_idletasks()进行窗体刷新3...

weixin_39647180的博客 2119

tkinter 与多线程

长时间执行后台任务,UI会处于无响应状态。在子线程里更新UI状态,听说是不允许的。在哪个线程里调用了tk.mainloop(),就只能在哪个线程里更新UI。 下例演示了如何更新。 import Tkinter as tk from ttk import * import time import Queue, threading class MainWindow: def __init

八戒的专栏 5040

python运行无响应_Tkinter窗口显示(未响应),但代码正在运行

我有一个程序在您单击操作按钮后运行一个长时间的过程。当进程正在运行时,即使我知道程序在后台运行,根窗口也会说它没有响应。这个计划将会发布给我和我一起工作的几个人,我想确保他们不会在他们看到这个时候吓坏了,关上窗户。我所拥有的解决方案是在正在运行的进程的循环中放置一个root.update,但我不确定这是否是最好的修复方法。Tkinter窗口显示(未响应),但代码正在运行使用Python 3.3下面...

weixin_39926678的博客 1812
上一篇: java SWT Browser实现浏览器功能并运行JavaScript代码
下一篇: Matlab 生成服从各种分布的随机数函数
hacker_G
博客等级 码龄9年 75粉丝 60原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值