我无法从另一个(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'
有办法吗?
非常感谢你的帮助!!!
答案 0 :(得分:1)
调用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()