Python 信号发射仅在一个功能中起作用,而在其他功能中不起作用?
我有一个有点奇怪的问题。我正在编写一个多线程应用程序,并使用信号将QThread的数据传递给GUI类数据。不用多说,这里是一个简化的代码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
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中。不过,感谢您的提示,我非常感谢。