python pyqt6 登陆成功关闭登录窗口,开启主窗口,主窗口为另一个类
时间: 2023-08-29 19:04:20 浏览: 36
实现这个功能可以采用信号与槽机制。首先,在登录窗口中,当用户成功登录后,可以发送一个信号,告诉主窗口要打开了。然后在主窗口中,接收这个信号,执行打开主窗口的操作,并关闭登录窗口。
下面是一个示例代码:
```python
from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QLabel, QVBoxLayout, QHBoxLayout
from PyQt6.QtCore import pyqtSignal, QObject
class LoginWidget(QWidget):
login_success_signal = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.username_input = QLineEdit()
self.password_input = QLineEdit()
self.login_btn = QPushButton("Login")
self.login_btn.clicked.connect(self.login)
layout = QVBoxLayout()
layout.addWidget(QLabel("Username:"))
layout.addWidget(self.username_input)
layout.addWidget(QLabel("Password:"))
layout.addWidget(self.password_input)
layout.addWidget(self.login_btn)
self.setLayout(layout)
def login(self):
# TODO: 登录验证
self.login_success_signal.emit()
class MainWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("Main Window")
class LoginAndMainWindow(QObject):
def __init__(self):
super().__init__()
self.login_widget = LoginWidget()
self.main_window = MainWindow()
self.login_widget.login_success_signal.connect(self.show_main_window)
self.login_widget.show()
def show_main_window(self):
self.main_window.show()
self.login_widget.close()
if __name__ == '__main__':
app = QApplication([])
login_and_main_window = LoginAndMainWindow()
app.exec()
```
在这个示例代码中,我们定义了一个 `LoginWidget` 类和一个 `MainWindow` 类,用来分别表示登录窗口和主窗口。然后,我们创建了一个 `LoginAndMainWindow` 类,它继承自 `QObject` 类,并在其中创建了一个 `LoginWidget` 实例和一个 `MainWindow` 实例。在 `LoginWidget` 类中,我们定义了一个 `login_success_signal` 信号,表示登录成功,当用户点击登录按钮时,如果登录成功,就发出这个信号。在 `LoginAndMainWindow` 类中,我们将 `login_success_signal` 信号连接到 `show_main_window` 槽函数上,在这个槽函数中,我们打开了主窗口,并关闭了登录窗口。
需要注意的是,由于 `LoginAndMainWindow` 类并不是一个窗口类,因此我们不能直接调用 `show()` 方法来显示它,而是需要在应用程序中创建一个实例并调用 `exec()` 方法来运行它。