在当前文件中按下按钮后,如何打开另一个 qt 设计器文件?

Posted

技术标签:

【中文标题】在当前文件中按下按钮后,如何打开另一个 qt 设计器文件?【英文标题】:How do I open another qt designer file after I press a button in the current file? 【发布时间】:2022-01-21 10:37:31 【问题描述】:

我通过一个qt设计器程序创建了一个名为(第一页)的简单文件,并在其中放置了一个名为(登录)的按钮,我还使用相同的程序创建了另一个名为(第二页)的简单文件

运行第一个文件并按下其中的按钮后,我想打开第二个文件,或者换句话说,我想将页面链接在一起。 我怎样才能做到这一点?。请问我需要帮助。

第一个文件代码:

从 PyQt5.QtWidgets 导入 QDialog, QApplication 从 PyQt5 导入 QtCore、QtGui、QtWidgets、uic 类 Ui_MainWindow(object):

def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(800, 600)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.pushButton = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton.setGeometry(QtCore.QRect(170, 140, 91, 31))
    font = QtGui.QFont()
    font.setFamily("Times New Roman")
    font.setPointSize(12)
    font.setBold(True)
    font.setItalic(True)
    font.setWeight(75)
    self.pushButton.setFont(font)
    self.pushButton.setObjectName("pushButton")
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.pushButton.setText(_translate("MainWindow", "Login"))
    self.pushButton.clicked.connect(self.buttonClicked)
def buttonClicked(self,Ui):
    uic.loadUi('secondpage.ui',self)

如果 name == "ma​​in": 导入系统 应用程序 = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(主窗口) MainWindow.show() sys.exit(app.exec_())

first page file second page file

【问题讨论】:

您不应尝试编辑 pyuic 文件,而应按照using Designer 中的说明使用它们。此外,即使使用正确的方式加载 UI,您也应该已经设置的小部件上使用loadUi 对不起,我不明白你的意思是代码有错误吗? 不,没有错误,有一个不好的做法。您正在使用的文件是由 pyuic 实用程序创建的,这些文件应该永远修改。阅读我之前评论中的链接,了解如何正确使用这些文件。 【参考方案1】:

我知道你的意思。所以,有解决办法:

from PyQt5.QtWidgets import QDialog, QApplication from PyQt5 import QtCore, QtGui, QtWidgets,uic 

# Add second window import here
from second_file import Second_Ui_MainWindow

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(170, 140, 91, 31))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        font.setBold(True)
        font.setItalic(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

        # Connect button with function
        self.pushButton,clicked.connect(lambda x: self.buttonClicked(MainWindow))

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Login"))
        self.pushButton.clicked.connect(self.buttonClicked)
    def buttonClicked(self, MainWindow):
        SecondScreen_MW = QtWidgets.QMainWindow()
        ui = Second_Ui_MainWindow()
        ui.setupUi(SecondScreen_MW )
        SecondScreen_MW.show()
        # (Optional) Hide first screen
        MainWindow.hide()

但是,正如@musicamante 所说:“您不应尝试编辑 pyuic 文件,而应按照使用 Designer 中的说明使用它们。此外,即使使用正确的方式加载 UI,也不应在已设置小部件。”

这种方法有效,但不是最好的。需要咨询的可以联系我

【讨论】:

不客气!

以上是关于在当前文件中按下按钮后,如何打开另一个 qt 设计器文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中按下按钮从另一个xib文件加载另一个xib文件

显示在 Qt 中按下按钮的时间

按下按钮时获取 PyQt4 以打开另一个 Qt 窗口

如何在vuejs中按下按钮后打开Web套接字?

QT按钮如何打开本地视频

Qt:脚本在按下按钮之前运行