如何让 Qthread 改变主 class 中的变量?
How to let a Qthread alter a variable from the main class?
我想弄清楚如何在我的 Main class 和 QThread 之间传递变量。这个想法是 QThread 能够改变和 return 变量。具体来说,我想通过 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 会话设置为全局变量。我读过一般不要这样做,但考虑到关于这个建议的来源,我会接受它。感谢大家的帮助,我会继续关注这个问题是否有人有其他想法。
我想弄清楚如何在我的 Main class 和 QThread 之间传递变量。这个想法是 QThread 能够改变和 return 变量。具体来说,我想通过 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 会话设置为全局变量。我读过一般不要这样做,但考虑到关于这个建议的来源,我会接受它。感谢大家的帮助,我会继续关注这个问题是否有人有其他想法。