gpt4 book ai didi

python - 在 Python GUI 中将数据传递到 QThread

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:28 25 4
gpt4 key购买 nike

我试图将一些参数(循环迭代次数、计数器值等)传递给 Qt GUI 线程中的运行方法。

一切都运行良好,包括 Thread、SIGNAL 和 SLOT,当我尝试将值传递给 run 方法时期待。当我传入一个整数值时,例如100,运行方法出错。当打印 run 方法中的值时,输出是一个对象内存地址,例如<ma​​in.位于 0x02BC27B0 的主要对象。

我该如何解决这个问题?

提前感谢您的帮助。

这是 Python 代码的示例:

#class testThread(QtCore.QThread):
def __init__(self,val, parent=None):
QtCore.QThread.__init__(self)
self.pulseTime = 0.002
self.counter = 0
self.icount = 0
self.timeout = 4
self.default = 99
self.val = val
print self.val
def run(self):
self.timer = QtCore.QTimer()
self.timer.setInterval(1000)
self.timer.setSingleShot(False)
self.timer.start()
self.timer.timeout.connect(self.update_mode)
self.exec_()

def update_mode(self):
self.counter += self.val
self.emit(QtCore.SIGNAL("int"),self.counter)

def stop(self):
self.terminate()

class Main(QtGui.QMainWindow):

def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.ui = Ui_Main()
self.ui.setupUi(self)
self._active = False
self.val = 100

self.setupSignals()

def spinBox_Value(self):
self.val = self.ui.spinBox.value()

def startPressed(self):
self.testThreadCall.start()

if not self._active:
self._active = True
self.ui.pButton_StartStop.setText("Stop")

else:
self._active = False
self.testThreadCall.stop()

print self._active


def setupSignals(self):

print "Val", self.val
self.testThreadCall = testThread(self, self.val)
self.testThreadCall.setTerminationEnabled(True)

QtCore.QObject.connect(self.testThreadCall, QtCore.SIGNAL("int"),self.labelSet)

self.ui.dopDown.addItems(['Default','Second Set','Third Set'])
self.ui.dopDown.currentIndexChanged.connect(self.dropDownEvent)

self.ui.pButton_StartStop.clicked.connect(self.startPressed)

self.ui.spinBox.valueChanged.connect(self.spinBox_Value)

def closeEvent(self, event):
self.testThreadCall.quit()

###if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Main()
window.show()

sys.exit(app.exec_())

最佳答案

testThread 类定义为:

class testThread(QtCore.QThread):
def __init__(self, val, parent=None):
...

稍后,您创建一个 testThread 的实例,如下所示:

self.testThreadCall = testThread(self, self.val)

所以testThread.val设置为self(=主窗口),testThread.parent设置为self .val。将 (self, self.val) 替换为 (self.val, self) 应该可以解决您的问题。

关于python - 在 Python GUI 中将数据传递到 QThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com