繁体   English   中英

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

[英]How to let a Qthread alter a variable from the main class?

我试图弄清楚如何在我的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()

因此,一位专业的开发人员朋友向我建议我应该将smtp会话设置为全局变量。 我读过不一般地这样做,但是考虑到有关这一建议的来源,我将继续。 感谢您提供的所有帮助,如果有人有其他想法,我将继续关注这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM