qt - 使用 pyqt5 和 qt designer 从主窗口打开第二个窗口

标签 qt pyqt5 qdialog childwindow

我正在使用 pyqt5 和 QtDesigner 创建一个带有两个窗口的应用程序。主窗口“MainWindow.ui”上的一个按钮应该从文件“age_entry.ui”打开第二个窗口,但我似乎遗漏了一些东西。单击第一个表单上的按钮会产生此错误":

Exception "unhandled TypeError" QDialog(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags()): argument 1 has unexpected type 'bool'

这是主窗口的代码:

# -*- coding: utf-8 -*-

import sys
from PyQt5 import uic, QtWidgets


Ui_MainWindow, QtBaseClass = uic.loadUiType("MainWindow.ui")
LandingPageUI, LandingPageBase = uic.loadUiType("age_entry.ui")

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)

        def showAgeEntryForm(self):
            self.child_win = AgeEntryForm(self)
            self.child_win.show()             

        self.btnOpenAges.clicked.connect(showAgeEntryForm)            


class AgeEntryForm(LandingPageBase, LandingPageUI):
    def __init__(self, parent=None):   
        LandingPageBase.__init__(self, parent)
        self.setupUi(self)            



if __name__ == "__main__":
    app=QtWidgets.QApplication.instance()
    if not app: 
         app = QtWidgets.QApplication(sys.argv)

    window = MyApp()
    window.show()
    sys.exit(app.exec_())

提前致谢!

这是代码形式的 MainWindow 和 age_entry 文件:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.7
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(526, 338)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_9 = QtWidgets.QLabel(self.centralwidget)
        self.label_9.setGeometry(QtCore.QRect(90, 10, 341, 41))
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.label_9.setFont(font)
        self.label_9.setObjectName("label_9")
        self.btnOpenAges = QtWidgets.QPushButton(self.centralwidget)
        self.btnOpenAges.setGeometry(QtCore.QRect(130, 90, 181, 61))
        self.btnOpenAges.setObjectName("btnOpenAges")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 526, 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.label_9.setText(_translate("MainWindow", "Ageing Session Management"))
        self.btnOpenAges.setText(_translate("MainWindow", "Enter Ages"))

还有 age_entry.ui

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'age_entry.ui'
#
# Created by: PyQt5 UI code generator 5.7
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(350, 189)
        self.label_13 = QtWidgets.QLabel(Dialog)
        self.label_13.setGeometry(QtCore.QRect(90, 20, 451, 61))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_13.setFont(font)
        self.label_13.setObjectName("label_13")

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label_13.setText(_translate("Dialog", "Age Entry Form"))

最佳答案

两个问题你的缩进是错误的。其次是你缺失的自己。在 showAgeEntryForm 上。试试这个:

def __init__(self):
    QtWidgets.QMainWindow.__init__(self)
    Ui_MainWindow.__init__(self)
    self.setupUi(self)
    self.btnOpenAges.clicked.connect(self.showAgeEntryForm)

def showAgeEntryForm(self):
    self.child_win = AgeEntryForm(self)
    self.child_win.show()

关于qt - 使用 pyqt5 和 qt designer 从主窗口打开第二个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41150669/

相关文章:

c++ - 如何检测 QString 是否由所有数字字符组成?

c++ - 标准随机函数不起作用 - Qt MinGw

python - Raspberry Pi 上的 PyQt5 Python 线程 RFID

c++ - ‘{’ 之前的预期类名

ios - 用Qt获得类似iOS7的模糊效果

c++ - 如何将同一个 Widget 连接到多个 QSignalMapper 映射

c++ - 使用 qt 中的事件将项目属性传递给主窗口

python - 通过信号的函数调用将默认键控参数更改为 'False' 。为什么?

python - PyQt5 到 PySide2,在不同类中加载 UI 文件

c++ - 自定义 QDialog 在 exec() 时导致段错误