【问题标题】:How to jump from 1 qt window to other in pyqt5.?如何在pyqt5中从1 qt窗口跳转到其他窗口。?
【发布时间】:2020-07-29 09:38:27
【问题描述】:

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

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

以下是文件代码:

login.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_())

register.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 的前任,我创建了一个不起作用的按钮单击事件。

谁能解释一下为什么它不起作用。请帮忙。谢谢

【问题讨论】:

    标签: python qt button pyqt5 qapplication


    【解决方案1】:

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

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

    即而是做类似的事情:

    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_())
    

    【讨论】:

    • 对不起,我没听明白。你能解释一下吗
    • 我没有得到你的代码。此代码是否会出现在按钮单击事件 show_registration_window 下。 ?
    • 你需要 1 个函数来初始化应用程序,它不应该在 Register 和 login 类中......因为这些实际上是“视图”并且你缺少一个控制器
    • 那么我应该把你的代码放在一个单独的文件中吗?
    • 那是个好主意...但是您也可以使用注册文件,只需将我的代码粘贴到您的 register.py 中并从登录中删除应用程序
    猜你喜欢
    • 2023-01-24
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2020-10-17
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多