【问题标题】:How can I pass data in run method (thread) (python, Pyqt)如何在运行方法(线程)(python,Pyqt)中传递数据
【发布时间】:2015-05-02 07:32:18
【问题描述】:

我想在窗口中使用 PyQt(Python) 创建线程。例如

class window(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(100, 100, 500, 200)
        self.setWindowTitle('Hello')
        self.label = QtGui.QLabel(u'WoRLd', self)
        self.Layout = QtGui.QVBoxLayout()
        self.Layout.addWidget(self.label)
        self.setLayout(self.Layout)
        self.introduced = 123


        self.request = Requests()
        self.request.start()

        self.connect(self.request, QtCore.SIGNAL("mysignal(QString)"),
            self.on_change, QtCore.Qt.QueuedConnection)

    def on_change(self, s):
        self.label.setText(s)

class Requests():
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)

    def run(self):
        self.emit(QtCore.SIGNAL("mysignal(QString)"), "143242" )


app = QtGui.QApplication(sys.argv)
main = window()
main.show()
sys.exit(app.exec_())

但是,在“运行”方法中,我需要“类窗口”中的一些日期(变量:引入)。 如何将此变量传递给“def run”?

【问题讨论】:

  • 仅仅在初始化器中调用QThread.__init__ 并不会让你成为QThread。您还需要从QThread 继承:class Requests(QtCore.QThread)

标签: python multithreading pyqt4


【解决方案1】:

您只需要为其创建参数并将其传递给类实例。然后将其分配给 self.date,这使得它可以跨类实例访问:

class window(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(100, 100, 500, 200)
        self.setWindowTitle('Hello')
        self.label = QtGui.QLabel(u'WoRLd', self)
        self.Layout = QtGui.QVBoxLayout()
        self.Layout.addWidget(self.label)
        self.setLayout(self.Layout)
        self.introduced = 123
        date = # get some date whatever you need to pass here

        self.request = Requests(date)
        self.request.start()

        self.connect(self.request, QtCore.SIGNAL("mysignal(QString)"),
            self.on_change, QtCore.Qt.QueuedConnection)

    def on_change(self, s):
        self.label.setText(s)

class Requests():
    def __init__(self, date, parent=None):
        self.date = date
        QtCore.QThread.__init__(self, parent)

    def run(self):
        # do something with self.date here
        self.emit(QtCore.SIGNAL("mysignal(QString)"), "143242" )


app = QtGui.QApplication(sys.argv)
main = window()
main.show()
sys.exit(app.exec_())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多