从主函数向线程发送信号?
Posted
技术标签:
【中文标题】从主函数向线程发送信号?【英文标题】:Sending a signal from main function to a thread? 【发布时间】:2014-10-10 06:55:07 【问题描述】:我正在使用 Pyqt4 在 python 中制作 GUI。我想从主 GUI 向线程发送信号以创建函数。我知道如何将信号从线程发送到主 GUI,但我不知道相反的事情。我也想用信号传递一个变量。
类似:
class MainGUI()
def function
value = 5
self.emit(QtCore.Signal("Signal(int)"),value)
class thread(QtCore.QThread)
def _init_(self)
Qtcore.QThread._init_()
self.connect(Qt.SIGNAL("Signal(int)"),self.run())
def run(self,value):
time.sleep(value)
因此,每次从主 GUI 传输信号时,我都希望在线程中并行运行该函数,而不会冻结 GUI。
任何帮助将不胜感激, 喷射
【问题讨论】:
【参考方案1】:正确的方法是创建将被移动到线程的对象。你不需要继承QtCore.QThread
!
或多或少是这样的(免责声明:我比 Python 更喜欢 C++):
myThread = QtCore.QThread()
testObject = YourClassWithSlots() # NO PARENT HERE
testObject.moveToThread(myThread)
myThread.start()
从那时起,testObject
(具有默认连接类型)的所有已连接插槽将在线程 myThread
中运行。
有用的链接:
http://blog.qt.io/blog/2010/06/17/youre-doing-it-wrong/ http://doc.qt.io/qt-5/qt.html#ConnectionType-enum http://doc.qt.io/qt-5/qobject.html#moveToThread更多细节请@Ezee
class YourClassWithSlots(QtCore.QObject) :
@Slot(int)
def havyTaskMethod(self, value) :
# long runing havy task
time.sleep(value)
self.myThread = QtCore.QThread(self)
self.testObject = YourClassWithSlots() # NO PARENT HERE
self.testObject.moveToThread(myThread) # this makes slots to be run in specified thread
self.myThread.start()
self.connect(Qt.SIGNAL("Signal(int)"), self.testObject.havyTaskMethod)
【讨论】:
问题是关于发送信号而不是关于使用线程。所以这不是一个答案。在这种情况下,OP 的下一个问题是“如何从移动到另一个线程的对象发送信号” 在投票之前阅读我给出的链接。看来你喜欢复仇。请注意,即使在编辑之后,您的答案也很糟糕。 @Jetmir 应该了解信号和插槽的功能(您也应该了解),那么他的问题将很容易解决。 链接可以提供更多信息,但不能提供答案。添加一些回答 OP 问题的内容,投票将被删除。想想也更有礼貌。 这里有更多详细信息。 你不需要从QThread
继承YourClassWithSlots
。以上是关于从主函数向线程发送信号?的主要内容,如果未能解决你的问题,请参考以下文章