首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从主函数向线程发送信号?

从主函数向线程发送信号?
EN

Stack Overflow用户
提问于 2014-10-10 06:55:07
回答 1查看 1.6K关注 0票数 1

我正在使用Pyqt4在python中创建GUI。我想发送一个信号从主GUI到一个线程,以建立一个功能。我知道如何从线程发送信号到主GUI,但我不知道相反的事情。另外,我想传递一个带有信号的变量。

类似于:

代码语言:javascript
复制
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。

任何帮助都将不胜感激,杰特

EN

回答 1

Stack Overflow用户

发布于 2014-10-10 07:40:50

正确的方法是创建将被移动到线程中的对象。您不需要子类QtCore.QThread

或多或少类似的事情(免责声明:我更多的是C++而不是Python):

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26293556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档