Как правильно запустить приложение pyqt5? - PullRequest
0 голосов
/ 10 сентября 2018

Я не могу заставить графический интерфейс приложения работать так, как мне нужно.Мой вопрос, учитывая приведенные ниже критерии, как мне правильно настроить и запустить графический интерфейс.Отсутствие хорошей документации, которую я обнаружил, безумно расстраивает (может быть, я смотрю в неправильных местах?).

У меня есть главное окно в файле с именем MainCustomerWindow.py, содержащее класс с тем же именем,Это где весь код от дизайнера qt.У меня есть другой файл класса под названием GUIController.Класс GUIController делает именно это, управляет несколькими окнами GUI.Именно в этом классе GUIController я пытаюсь создать экземпляр и запустить MainCustomerWindow.Вот код, который я пробовал.

def setup_window(self):
    APP = QtWidgets.QApplication(sys.argv)
    Window = MainCustomerWindow()
    Window.setupUi(QtWidgets.QMainWindow)
    Window.show()
    sys.exit(APP.exec_())

Как примечание, я пришел из JavaFX и Swing и не до конца понимаю рабочий процесс для pyqt5.Поэтому, если бы кто-то мог добавить объяснение этому, это было бы очень признательно.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы можете попробовать взять код, который у вас есть, и добавить его в основной оператор в конце скрипта вашего приложения. Вы также можете использовать этот оператор для создания экземпляра вашего класса, где метод init содержит вызов setupui(). Например:

if __name__ == '__main__':
    app = QWidgets.QApplication(sys.argv)
    window = QMainWindow()
    main_window = MainCustomerWindow()

    window.show()
    sys.exit(app.exec())

Этот код сначала устанавливает приложение PyQt в качестве экземпляра QApplication. Затем он создает экземпляр QMainWindow, чтобы PyQt знал, что отображать при запуске основного приложения. По моему опыту, я поместил setupui() в метод init класса приложения. В вашем случае, в методе init MainCustomerWindow Наконец, window.show() говорит PyQt начать рендеринг главного окна.

0 голосов
/ 10 сентября 2018

Класс, сгенерированный Qt Designer, не является виджетом, это класс, используемый для заполнения существующего виджета, поэтому вы должны создать объект в окне, если вы использовали шаблон «Главное окно», тогда виджет долженбыть QMainWindow (если это другой, может быть, вы должны использовать QDialog или QWidget), тогда вы должны создать другой класс, который принадлежит дизайну, и с помощью метода setupUi() вы должны передать виджет, чтобы заполнить его:

def setup_window(self):
    app = QtWidgets.QApplication(sys.argv)
    # create window
    window = QtWidgets.QMainWindow()

    ui = MainCustomerWindow()
    # fill window
    ui.setupUi(window)

    window.show()

    sys.exit(app.exec_())

Хотя лучшим вариантом является создание нового класса и наследование его от обоих:

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

Если вы хотите получить подробную информацию, я рекомендую вам прочитать следующее:

...