Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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 信号发射仅在一个功能中起作用,而在其他功能中不起作用?_Python_Qt_Pyqt_Signals Slots - Fatal编程技术网

Python 信号发射仅在一个功能中起作用,而在其他功能中不起作用?

Python 信号发射仅在一个功能中起作用,而在其他功能中不起作用?,python,qt,pyqt,signals-slots,Python,Qt,Pyqt,Signals Slots,我有一个有点奇怪的问题。我正在编写一个多线程应用程序,并使用信号将QThread的数据传递给GUI类数据。不用多说,这里是一个简化的代码 class GUI(uiMainWindow.MainWindow): def __init__(self, parent=None): super etc self.thread = Thread() self.connect(self.thread, SIGNAL("changeStatus(QStr

我有一个有点奇怪的问题。我正在编写一个多线程应用程序,并使用信号将QThread的数据传递给GUI类数据。不用多说,这里是一个简化的代码

class GUI(uiMainWindow.MainWindow):
    def __init__(self, parent=None):
        super etc
        self.thread = Thread()
        self.connect(self.thread, SIGNAL("changeStatus(QString)"), self.setStatus, Qt.QueuedConnection)

    def setStatus(self, status):
        self.statusBar.setText(status)


class Thread(QThread):
    def __init__(self, parent=None, create=True):
        super etc
        self.create = create

    def run(self):
        if self.create:
            create_data()
        if not self.create:
            upload_data()

    def create_data(self):
        self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")
        #rest of the code

    def upload_data(self):
        self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")
很基本,对吧?但是,问题是:self.emit只在create_data函数中起作用,而在upload_data中不起作用(或者,在其他任何函数中,我也试着将它放在
\uuu init_uu
中)。我尝试在setStatus函数中输入
打印“我获得状态”+状态。同样,它在create_data()函数中起作用,但在upload_data()函数中不起作用

这两个函数之间的差异相对较小,据我所知,没有任何东西会干扰self.emit函数-事实上,在这两种情况下,self.emit与函数定义的“距离”只有4-5行

这对我来说真是莫名其妙。有什么帮助吗?提前谢谢


编辑:同样,据我所知,这两个函数之间的唯一区别在于run()——如果create参数为True,则调用第一个函数,如果create参数为False,则调用第二个函数

我在我的岗位上是对的。Thread()和Thread(create=False)之间的区别至关重要。我必须定义一个新方法(一个是
self.thread=thread()
,另一个是
self.diff_thread=thread(create=False)
),并连接到不同的插槽以使其正常工作。

我的帖子写得对。Thread()和Thread(create=False)之间的区别至关重要。我必须定义一个新方法(一个是
self.thread=thread()
,另一个是
self.diff_thread=thread(create=False)
),并连接到不同的插槽以使其工作。

除了信号签名中多余的
(QString)
之外,您发布的示例代码没有任何错误。请发布一个完整的、可运行的示例来演示这个问题。@ekhumoro:我希望我可以这样做,但程序的源代码很接近:(那么你是说QString完全没有必要吗?我是否应该将它留空(即
changeStatus()
)?如果您使用的是旧式语法,并且将python信号连接到python可调用对象,则只需要名称(例如,
changeState
)是必需的。有关各种可能性,请参阅。当然,对于新项目,最好使用。我一直想切换到新型信号,但我正在赶最后期限。可能在应用程序的v2中。不过,感谢您的提示,我非常感谢。除了多余的
(QString)之外
在信号签名中,您发布的示例代码没有任何错误。请发布一个完整的、可运行的示例来演示问题。@ekhumoro:我希望我可以这样做,但程序的源代码非常接近:(那么您是说QString完全没有必要吗?我是否应该将其留空(即
changeStatus()
)?如果使用旧式语法,并将python信号连接到python可调用对象,则只需名称(例如,
changeState
)是必需的。有关各种可能性,请参阅。当然,对于新项目,最好使用。我一直想切换到新型信号,但我正在赶最后期限。可能在应用程序的v2中。不过,感谢您的提示,我非常感谢。