#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
, и она сработала.