Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python新样式的信号和线程与gui应用程序之间的插槽_Python_Multithreading_Pyqt_Signals Slots - Fatal编程技术网

Python新样式的信号和线程与gui应用程序之间的插槽

Python新样式的信号和线程与gui应用程序之间的插槽,python,multithreading,pyqt,signals-slots,Python,Multithreading,Pyqt,Signals Slots,我是OOP和python的新手。我正在尝试使用新样式的信号和插槽将信号从Qthread发送到qtgui主窗口 这是线。在GUI中单击RUN按钮后,我将在GUI中发出更新消息对话框的信号,并在3秒钟后发出。我不确定继承的定义是否正确,或者信号的定义方式是否正确 class OptimThread (QtCore.QThread): signalUpdateMessageDialog = QtCore.SIGNAL("updateMessageDialog(PyQt_PyObject,QS

我是OOP和python的新手。我正在尝试使用新样式的信号和插槽将信号从Qthread发送到qtgui主窗口

这是线。在GUI中单击RUN按钮后,我将在GUI中发出更新消息对话框的信号,并在3秒钟后发出。我不确定继承的定义是否正确,或者信号的定义方式是否正确

class OptimThread (QtCore.QThread):

    signalUpdateMessageDialog = QtCore.SIGNAL("updateMessageDialog(PyQt_PyObject,QString)")

    def __init__(self):
        QtCore.QThread.__init__(self)

    def run(self):

        start = time.time()

        self.emit(self.signalUpdateMessageDialog, time.time() - start, 'Initialising...')     

        time.sleep(3)

        self.emit(self.signalUpdateMessageDialog, time.time() - start, 'You waited 3 seconds...')
主类和应用程序部分是这样的(我省略了其他可能不相关的代码)

它说:

self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog) AttributeError:“str”对象没有属性“connect”


我感谢您的建议(与主题和样式相关),并为没有制作MWE而道歉。

您的示例的结构或多或少是正确的:但您将旧样式的信号槽语法与新样式混为一谈

信号定义应如下所示:

class OptimThread(QtCore.QThread):
    signalUpdateMessageDialog = QtCore.pyqtSignal(int, str)
    self.signalUpdateMessageDialog.emit(
        time.time() - start, 'Initialising...')
信号应按如下方式发出:

class OptimThread(QtCore.QThread):
    signalUpdateMessageDialog = QtCore.pyqtSignal(int, str)
    self.signalUpdateMessageDialog.emit(
        time.time() - start, 'Initialising...')
这就是信号的连接方式:

    self.optimThread.signalUpdateMessageDialog.connect(
        self.updateMessageDialog)

新的语法,不需要使用<代码>信号()/<代码>或<代码> StULL()/<代码>,并且不必指定C++签名。


有关更多详细信息,请参见中的。

示例的结构或多或少是正确的:但您将旧式信号槽语法与新式信号槽语法混为一谈

信号定义应如下所示:

class OptimThread(QtCore.QThread):
    signalUpdateMessageDialog = QtCore.pyqtSignal(int, str)
    self.signalUpdateMessageDialog.emit(
        time.time() - start, 'Initialising...')
信号应按如下方式发出:

class OptimThread(QtCore.QThread):
    signalUpdateMessageDialog = QtCore.pyqtSignal(int, str)
    self.signalUpdateMessageDialog.emit(
        time.time() - start, 'Initialising...')
这就是信号的连接方式:

    self.optimThread.signalUpdateMessageDialog.connect(
        self.updateMessageDialog)

新的语法,不需要使用<代码>信号()/<代码>或<代码> StULL()/<代码>,并且不必指定C++签名。 有关详细信息,请参阅中的