多线程工作时函数进入while true循环后无法设置文本该如何解决?
datafetch函数作为一个线程,持续获取参数,并将参数打印出来并设置为ui中的相应文本
但是当makesure进入while True循环时,虽然datafetch仍然持续进行,并打印参数,但是无法调用setText函数修改ui中相应文本的文本值,有没有比较懂这个逻辑原理的,帮忙解释一下,谢谢 别的线程不是只要提供数据给界面的线程吗?你这不是卡住主界面刷新吗 一般情况下,刷新 UI,都不会是在数据处理线程中,一个是有权限,一个是UI 刷新本身慢,刷新太快你看不过来也没有意义
正常的逻辑是数据处理是数据处理的逻辑,死循环里一直刷 UI,在哪种编程语言里,情况都差不多 古二真!
你的线程在while true死循环,UI线程根本得不到执行权去刷新界面,界面怎么可能变化呢?
至于print输出,那是python的标准输出,和UI无关,因为UI不是python自己的
提个建议,提问题最好把前因后果,上下文都说一下,使用的设备,机器,软件工具环境什么的,
也方便回答问题的人快速锁定问题核心 Appcat 发表于 2024-4-11 12:06
古二真!
你的线程在while true死循环,UI线程根本得不到执行权去刷新界面,界面怎么可能变化呢?
(引用自4楼)
我写的while True是有跳出循环的条件的,大概就是在到达一个位置后跳出循环,在循环实时获取电机位置和速度并修改ui界面的文本值。我理解你的意思,在循环中ui得不到执行权,没办法更新,那该怎么修改比较好呢? 小马快跑777 发表于 2024-4-11 14:50
我写的while True是有跳出循环的条件的,大概就是在到达一个位置后跳出循环,在循环实时获取电机位置和速 ...
(引用自5楼)
pyQT我不熟,而且因为商业授权的问题,公司也不允许使用,这里就不能给你直接指导了,万一弄错耽误了你
你这个问题是典型的任务调度,底下需要实时从接口或者设备拿数据,然后需要UI及时更新,UI的更新速度,接口数据
的速度,就是一对矛盾;
实时数据非常快,使用while true读取这样最及时,但是UI更新就不能及时了,所以要权衡一下,
如果数据速度没有那么快,是不是可以用一个定时任务去读数据(不要用线程),然后回到主线程UI自然就更新。
但是如果数据速度非常高,即使实现了UI的及时更新,也没有实际意义,因为人眼始终是慢的,界面会根本看不清。
那么还有一种思路,就像python的signal模块,有点模仿硬件中断的思路,让数据到来时触发一个信号,然后预定义
的信号处理函数完成对数据的处理,全部工作都在主进程中完成,也无需专门的线程参与
Appcat 发表于 2024-4-11 16:11
pyQT我不熟,而且因为商业授权的问题,公司也不允许使用,这里就不能给你直接指导了,万一弄错耽误了你
...
(引用自6楼)
okok,谢谢了,确实不需要这么快的更新速度
页:
[1]