在 PyQt5 中将参数传递给 QThread 子类时出错

Posted

技术标签:

【中文标题】在 PyQt5 中将参数传递给 QThread 子类时出错【英文标题】:Error when passing argument to QThread subclass in PyQt5 【发布时间】:2015-12-20 11:45:44 【问题描述】:

我是 PyQt5 的新手,当我尝试将参数传递给 QThread 子类时出现问题。代码如下:

class DrClientThread(QtCore.QThread):
    def __int__(self, server, username, password):
        QtCore.QThread.__init__(self)
        self.server = server
        self.username = username
        self.password = password

    def run(self):
        print(self.username, self.password, self.server)

class DrCOM_UI(Ui_Login_Dialog):
    def __init__(self, dialog):
        Ui_Login_Dialog.__init__(self)
        self.setupUi(dialog)
        self.login_btn.clicked.connect(self.login_and_keep_alive)
        ...
    def login_and_keep_alive(self):        
        server, username, password = self.write_data_before_login()
        self.drclient = DrClientThread(server, username, password)
        self.drclient.start()

当我运行代码时,它给了我异常:

in login_and_keep_alive
self.mydrclient = DrClientThread(server, username, password)
builtins.TypeError: QThread(QObject parent=None): argument 1 has unexpected type 'str'

我做了一些谷歌工作,并阅读了与此问题相关的几乎所有关于 *** 的问题,但我找不到解决方案。其实,我想这样做:How can I pass arguments to QThread Worker class?

有人可以帮助我吗?

【问题讨论】:

你有__int__而不是__init__ 谢谢,我需要更加小心。但是,现在出现了一个新错误:QtCore.QThread.__init__() builtins.TypeError: self must not be None 我该如何解决? 【参考方案1】:
class DrClientThread(QtCore.QThread):
    def __int__(self, server, username, password):
        QtCore.QThread.__init__(self)
        self.server = server
        self.username = username
        self.password = password

    def run(self):
        print(self.username, self.password, self.server)

class DrCOM_UI(Ui_Login_Dialog):
    def __init__(self, dialog):
        Ui_Login_Dialog.__init__(self)
        self.setupUi(dialog)
        self.login_btn.clicked.connect(self.login_and_keep_alive)
        ...
    def login_and_keep_alive(self):        
        server, username, password = self.write_data_before_login()
        self.drclient = DrClientThread(self, server, username, password) # <<-----
        self.drclient.start()

【讨论】:

虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。 确保包含更深入的说明,说明您的代码在做什么以及问题发生在哪里。展示您的书面代码可以极大地提高帖子的清晰度,但您应该将其与解释其工作原理的书面文字以及一些有关查明错误的信息配对,以便编写一个可以吸引优秀答案的好问题。跨度>

以上是关于在 PyQt5 中将参数传递给 QThread 子类时出错的主要内容,如果未能解决你的问题,请参考以下文章

在VueJS中将父函数传递给子组件

在 Eclipse(Pydev) 中将命令行参数传递给 Python 脚本

如何在 Delphi 2010 中将参数传递给 flash 电影?

在 Swift 中将参数传递给选择器

如何在django中将多个参数传递给url

如何在 Flutter 中将参数传递给动作