
self.registerWin.closed.connect(self.on_reg_window_closed) 这行代码运行的时候报错 AttributeError: 'RegisterWindow' object has no attribute 'closed'. Did you mean: 'close'?
RegisterWindow 继承于 QWidget class RegisterWindow(QWidget):
就是现在如果我想实现子窗口打开的时候主窗口隐藏, 反之显示, 所以这里需要用一个子窗口的关闭事件, 但是出现这个问题如何解决?
# -*- coding: utf-8 -*- from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout from registerWindow import RegisterWindow from PyQt6 import QtCore, QtWidgets class LoginWindow(QWidget): def __init__(self): super().__init__() # 设置窗口大小 self.setGeometry(200, 200, 400, 200) # 创建控件 self.username_label = QLabel('用户名') self.username_input = QLineEdit() self.password_label = QLabel('密码') self.password_input = QLineEdit() self.login_button = QPushButton('登录') self.register_button = QPushButton('注册') # 创建布局 layout = QVBoxLayout() layout.addWidget(self.username_label) layout.addWidget(self.username_input) layout.addWidget(self.password_label) layout.addWidget(self.password_input) layout.addWidget(self.login_button) layout.addWidget(self.register_button) # 设置布局 self.setLayout(layout) # 子窗口 self.registerWin = RegisterWindow() self.registerWin.closed.connect(self.on_reg_window_closed) # 连接信号和槽 self.login_button.clicked.connect(self.on_login_button_clicked) self.register_button.clicked.connect(self.on_register_button_clicked) def on_sub_window_closed(self): # 子窗口已关闭 print("子窗口已关闭") def on_login_button_clicked(self): username = self.username_input.text() password = self.password_input.text() # 在这里可以添加验证用户输入的代码,如果验证通过则可以跳转到主界面 def on_register_button_clicked(self): self.hide() self.registerWin.show() def on_reg_window_closed(self): self.show() if __name__ == '__main__': app = QApplication([]) login_window = LoginWindow() login_window.show() app.exec() 1 NoOneNoBody 2023-04-23 12:54:40 +08:00 提示不是写了么 QWindow 和 QWidget 都没有 closed 这个信号,应该用 visibleChanged 或者 activeChanged ,或者写个自定义的 close event |
2 woshichuanqilz OP |
3 woshichuanqilz OP 这样感觉这个比较简单的功能也要单独定义一个信号也挺麻烦的 |
4 NoOneNoBody 2023-04-23 13:39:20 +08:00 @woshichuanqilz #2 QWidget 是一个泛类型控件,就是给用户自定义用的,所以不会有比较专用的信号 另外,信号不止三个的,它也是继承,父级有不少信号可用,你要循着手册去搜 close() 其实是个组合事件,包括 hide 、destory 等,各自都可以做相应的事,qt 的思想是细分,让用户处理 qt 可以算是属于 GUI“底层开发” 如果你想直接对一个组合事件处理: 1. 找人家写好的三方包 2. 可以写一个自定义类(构件)继承,放到公共目录,以后从这个构件去创建就好了 我就写了不少,例如文本框+文件浏览按钮+fileopen/save 对话框,以后写文件读写就直接调用不用再研究三者组合了 |