我正在用PyQT5制作一个简单的GUI程序。在
但现在我遇到了一些关于线的问题。在
我只做了一个简单的测试程序,比如bottom:
该程序只是试图将数字附加到textbox,但它崩溃了。在
我不知道为什么,但不知怎么的,我可以通过删除一条评论来阻止它(时间。睡觉)在
import sys
import threading
import time
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Some(QWidget):
e = threading.Event()
def btnfunc(self):
self.e.set()
def __init__(self):
super().__init__()
self.myButton = QPushButton('do next')
self.logs = QTextEdit()
self.mylay = QVBoxLayout()
self.mylay.addWidget(self.myButton)
self.mylay.addWidget(self.logs)
self.setLayout(self.mylay)
self.setGeometry(300, 300, 300, 550)
self.setWindowTitle('mytest')
self.show()
t = threading.Thread(target=self.myfunc, args=( ))
t.start()
self.myButton.clicked.connect(self.btnfunc)
def myfunc(self):
for i in range(300):
# time.sleep(0.4)
self.logs.append(str(i))
if i == 20:
self.e.wait()
app = QApplication(sys.argv)
ex = Some()
sys.exit(app.exec_())
如果把时间定得高一点就更好了。在
我认为这是因为资源访问,因为它是pyqt5gui。在
所以我找到了QThread。我试过像屁股一样
^{pr2}$但撞车,没用。尝试了QThread+线程。事件(). 它冻结GUI。在
现在我不知道该怎么做。。。在
编辑: 我刚刚意识到了线。不应从除QThread之外的其他线程访问。 那我就继续查QWaitCondition
您不应该通过多线程直接控制GUI。由于两个不同的线程试图控制GUI,这将导致冻结或崩溃。 我从这里学到了这个概念http://www.xyzlang.com/python/PyQT5/pyqt_multithreading.html
这是你的代码,可以完美地工作。在
相关问题 更多 >
编程相关推荐