PyQt5: Ошибка типа: «Неверный базовый класс виджета верхнего уровня»

#python #pyqt #pyqt5

#питон #python-3.x #pyqt #pyqt5

Вопрос:

Я создал файлы .ui с помощью QtDesigner и загружаю их в два отдельных окна, как показано ниже

 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 в режиме отладки, возникает следующая ошибка, однако этого не происходит при обычном запуске кода

 TypeError: ('Wrong base class of toplevel widget', (lt;class 'controllers.GUI.PopupWindow'gt;, 'QDialog'))  

Комментарии:

1. Вы получаете сообщение об ошибке при запуске в консоли/терминале/cmd.exe/powershell ? добавьте полное сообщение об ошибке, о котором идет речь.

2. @furas Когда я просто запускаю код нормально, ошибок нет, однако, если я запускаю код в режиме отладки в PyCharm, я получаю ошибку типа, которую я добавил в вопрос

3. у вас есть сообщение 'Wrong base class of toplevel widget', (lt;class 'controllers.GUI.NewClassWindow'gt;, 'QDialog')) , поэтому я думаю, что оно ожидает, что вы используете QDialog его для создания второго окна, но вы используете QMainWindow в class PopupWindowONE(QMainWindow):

4. @furas Большое вам спасибо за вашу помощь, изменившись class PopupWindowONE(QMainWindow) , чтобы class PopupWindowONE(QDialog) решить проблему. Я полагаю, что это было вызвано тем, что я выбрал шаблон «Диалог с кнопками» в QtDesigner. Я изменил вопрос, чтобы правильно отразить проблему, если вы хотите ответить

Ответ №1:

У вас есть QDialog сообщение 'Wrong base class of toplevel widget', (lt;class 'controllers.GUI.NewClassWindow'gt;, 'QDialog') , поэтому я думаю, что оно ожидает QDialog создания второго окна, но вы используете QMainWindow в class PopupWindowONE(QMainWindow):

Другими словами, проверьте тип класса файла .ui, который вы собираетесь инициировать; если класс a QDialog , то ваш класс python должен получить a QDialog .

Ответ №2:

У меня была аналогичная проблема при использовании QDialog , но я изменил ее на QMainWindow , и она сработала.