如何让Qthread改变主类的变量?

时间:2018-04-12 18:37:17

标签: python pyqt qthread

我试图找出如何在我的Main类和QThread之间传递变量。这个想法是QThread能够改变并返回变量。具体来说,我想用smtplib会话来做这件事。我理解如何使用信号和插槽来更新QThread中的UI元素,但是如果只是给我改变的变量而不在标签或类似物中显示它?特别是因为变量不是简单的数据类型,如int或str。

我是python和pyqt的初学者,我对QMutex以及我正在阅读的其他内容感到非常困惑。我不反对自己进行研究,如果你能指出我的水平上的某个人能够理解的正确方向。

以下是一些代码,我认为这些代码显示了我要做的事情:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
import smtplib

import mainwindow


class Main(QMainWindow, mainwindow.Ui_MainWindow):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)

        self.start_smtp_button.clicked.connect(self.start_smtp)

    def start_smtp(self):

        smtp = self.smtp_lineEdit.text()
        port = self.port_lineEdit.text()

        self.a_thread = Thread(smtp, port)
        self.a_thread.start()

    def login(self):

        #  if I had access to the 's' from my thread, I could do other stuff with it, right?


class Thread(QThread):   

    def __init__(self, smtp, port, parent=None):
        super(Thread, self).__init__(parent)

        self.smtp = smtp
        self.port = port

    def run(self):

        s = smtplib.SMTP(host=self.smtp, port=int(self.port))


def main():

    app = QApplication(sys.argv)
    form = Main()
    form.show()
    app.exec_()


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:-1)

因此,专业开发人员朋友向我建议我应该将我的smtp会话作为全局变量。我读过一般不这样做,但考虑到这个建议的来源,我会继续这样做。感谢所有的帮助,我将继续监控这个问题是否有人有其他想法。