python - PyQt 从另一个类访问属性

标签 python python-2.7 class variables pyqt

我无法从另一个类(user_register_window)修改第一个类(login_window)的属性...我的代码如下:

class login_window(QtGui.QWidget, Ui_login_form):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)
        self.register_window = None
        self.login_btn.clicked.connect(self.login_func)
        self.register_btn.clicked.connect(self.register_func)
        usernames_list = c.execute("SELECT USERNAME FROM register_table").fetchall()
        for data in usernames_list:
            self.username_combo_field.addItems(data)
   def register_func(self):
        if self.register_window is None:
            self.register_window = user_register_window(self)
            self.register_btn.setEnabled(False)
            self.login_btn.setEnabled(False)
        self.register_window.show()



class user_register_window(QtGui.QDialog, Ui_register_form):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setupUi(self)
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.CustomizeWindowHint)
        self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint)
        self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowCloseButtonHint)
        self.cancel_btn.clicked.connect(self.cancel_pressed)

    def cancel_pressed(self):
        user_register_window.close(self)
        login_window.login_btn.setEnabled(True)  #doesn't work

我的login_window首先运行,因此当我单击register_btn时,会出现“user_register_window”,并且在login_window中禁用register_btn和login_btn。到目前为止,一切正常,我的问题是当我关闭“user_register_window”时。当我按cancel_btn时,我想再次启用“register_btn”和“login_btn”。

我尝试使用以下代码:

login_window.login_btn.setEnabled(True)

在cancel_pressed函数内部,但它不起作用。

AttributeError: type object 'login_window' has no attribute 'login_btn'

有办法吗?

非常感谢您的帮助!!!

最佳答案

调用 login_window.login_btn.setEnabled(True) 无法访问该属性,因为您引用的是该类,而不是实例(并且该属性仅在实例上设置,在构造函数)。

您可以使用父链接从第二个实例访问 login_window,因为您已将第二个实例声明为子窗口小部件(使用 self.register_window = user_register_window(self)),您可以使用以下几行来实现此目的:

self.parent().login_btn.setEnabled(True)
self.parent().register_btn.setEnabled(False)

#and it's better to close the widget with : 
self.close()

关于python - PyQt 从另一个类访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45265512/

相关文章:

python - 如何根据 python 中其他多个列的名称创建一列?

python - Python 的 'a+' 文件打开模式中的错误?

python - python 中定义中的类和字符串

c++ - 如何在两个实例中使用值进行计算?

python - 替换除两位数字之间的所有连字符

python - 为什么 unicode 字符串不能与 python 中的字节字符串进行比较?

Python删除字符串

python - 如何从 Python 中的字符串中提取开始时间?

json - 导入错误 : cannot import name 'maketrans'

java - 匿名内部类和良好实践