PyQt5: TypeError: 'Wrong base class of toplevel widget'

问题描述 投票:0回答:2

我使用 QtDesigner 创建了 .ui 文件,并将它们加载到两个单独的窗口中,如下所示

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__()

        # Set up the user interface from Designer.
        uic.loadUi("interface/UI/main.ui", self)

        # Connect up the buttons
        self.button_classes.clicked.connect(self.open_classes)

        self.w = []

    def open_classes(self):
        self.w.append(PopupWindow(self))
        self.w[-1].show()


class PopupWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__()

        # Set up the user interface from Designer.
        uic.loadUi("interface/UI/newclass.ui", self)

当我在PyCharm中以debug模式运行代码时,出现如下错误,但是正常运行代码时不会出现这种情况

TypeError: ('Wrong base class of toplevel widget', (<class 'controllers.GUI.PopupWindow'>, 'QDialog'))
python python-3.x pyqt pyqt5
2个回答
7
投票

您在消息

QDialog
中有
'Wrong base class of toplevel widget', (<class 'controllers.GUI.NewClassWindow'>, 'QDialog')
所以我认为它期望
QDialog
创建第二个窗口但您在
QMainWindow
中使用
class PopupWindowONE(QMainWindow):

也就是说,检查你要启动的.ui文件的类类型;如果课程是

QDialog
那么您的 python 课程需要收到
QDialog
.


4
投票

我在使用

QDialog
时遇到了类似的问题,但将其更改为
QMainWindow
并且有效。

© www.soinside.com 2019 - 2024. All rights reserved.