如何在pyqt5中从1 qt窗口跳到另一个窗口



我正在进行pyqt5项目,其中有login窗口和registration窗口。我在login窗口上有一个按钮,单击该按钮将打开registration窗口。我在qt desginer中设计了ui,并使用pyuic.ui文件转换为.py文件。

所以我有两个文件login_ui.pyregister_window_ui.py。为了使用它们,我还创建了两个单独的文件,即login.pyregister.py,其中包含ui文件的所有功能代码。

以下是文件代码:

登录.py

import sys
import os
from PyQt5 import QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui.login_ui import Ui_login_main_window
from ui.register_window_ui import Ui_register_window
curr_path = os.path.dirname(os.path.abspath(__file__))
class Login(QMainWindow, Ui_login_main_window):
def __init__(self):
QMainWindow.__init__(self)
self.login_ui = Ui_login_main_window()
self.login_ui.setupUi(self)
self.login_ui.register_settings_btn.clicked.connect(self.show_registration_window)
def show_registration_window(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_register_window()
self.ui.setupUi(self.window)
self.window.show()
app = QApplication(sys.argv)
main_window = Login()
main_window.show()
sys.exit(app.exec_())

寄存器.py

import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui.register_window_ui import Ui_register_window
curr_path = os.path.dirname(os.path.abspath(__file__))
class Register(QMainWindow, Ui_register_window):
def __init__(self):
QMainWindow.__init__(self)
self.register_win_ui = Ui_register_window()
self.register_win_ui.setupUi(self)
self.register_win_ui.register_trial_btn.clicked.connect(self.print_data)
def print_data(self):
print("Clicked")
app = QApplication(sys.argv)
main_window = Register()
main_window.show()
sys.exit(app.exec_())

正如您所看到的,在login.py中,我为register_settings_btn创建了一个按钮单击事件,单击该事件时将显示Ui_register_window(),即register_window。因此,当我点击它时,它会显示窗口,但窗口不起作用,即没有发生按钮点击事件。例如,在register.py中,我创建了一个按钮单击事件,但该事件不起作用。

有人能解释一下为什么它不起作用吗。请帮忙。感谢

我在登录窗口上有一个按钮,单击该按钮时会打开注册窗口

不创建2个QApplications,只创建1个并显示或执行第一个登录,验证输入,如果一切正常,则显示Register

也就是说,做一些类似的事情:

app = QApplication(sys.argv)
login_window = Login()
result = login_window.exec()
if result == ???:
register_window = Register()
register_window.show()
else:
showMsg('Login failed!') 
sys.exit(app.exec_())

更新!创建另一个文件,即myProject.py并添加此文件!

#!/usr/local/bin/python
# coding: utf-8
import os, sys
add your imports here!

if __name__ == "__main__":
app = QApplication(sys.argv)
#create login view nd register view
login_window = Login()
register_window = Register()
#execute the view login and read the doc, this will block the code until the user quit the view!
result = login_window.exec()
#define a condition to proof the validity of login process
if result == ???:
#show the register 
register_window.show()
else:
#or show the error msg
showMsg('Login failed!') 
sys.exit(app.exec_())