PyQt - как добавить отдельный виджет пользовательского интерфейса в QMainWindow

Я только недавно начал программировать и Python (PyQt) в частности. У меня есть основной QMainWindow . Но я хотел отделить его от виджетов пользовательского интерфейса, чтобы все элементы Windows (меню, панели инструментов, общие кнопки) находились в QMainWindow , но все виджеты, специфичные для программы / пользовательского интерфейса (кнопки, поля со списком, изображения , флажки и т. д.) находятся в отдельном классе QWidget , но я не уверен, правильно ли я это делаю.

  1. У меня проблема с макетами - что-то невидимое закрывает меню, поэтому на них нельзя щелкнуть мышью, я думаю, я неправильно добавляю свой виджет пользовательского интерфейса в главное окно

Вот как я это делаю:

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

        self.main_widget = QWidget(self)
        ...
        self.form_widget = FormWidget(self) 
        #This is my UI widget

        self.main_layout = QVBoxLayout(self.main_widget)
        self.main_layout.sizeConstraint = QLayout.SetDefaultConstraint
        self.main_layout.addWidget(self.form_widget.main_widget) 
        #form_widget has its own main_widget where I put all other widgets onto

        self.main_widget.setLayout(self.main_layout)
        self.setCentralWidget(self.main_widget)
  1. Я видел другие программы Python, где приложения разбиты на множество небольших файлов кода (насколько я понимаю, все, что находится в основном классе, нечитаемо или неуправляемо).

Что вы предлагаете по поводу разбиения кода на мелкие части? Как это лучше сделать? Или для пользовательского интерфейса все это может быть в одном большом месте? Стоит ли вообще разбивать код / ​​классы пользовательского интерфейса на отдельный файл?

Спасибо.

[решено]

Я обнаружил свою ошибку - я удалил main_widget из класса виджета пользовательского интерфейса (теперь все виджеты пользовательского интерфейса размещены непосредственно в самом виджете класса пользовательского интерфейса) и делаю только следующее:

self.main_layout.addWidget(self.form_widget)

больше нет проблем с меню

19
задан NorthCat 20 August 2014 в 18:53
поделиться