Изменение размера главного окна в Python с помощью Qt

У меня есть графический интерфейс ui_main.py файл (разработан в Qt Designer). Я загружаю это в моем главном *.py файл таким образом:

from PyQt4 import QtGui, QtCore
from ui_main import Ui_MainWindow
class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
...

Файл ui_main.py:

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(667, 559)

Мне нужно изменить размер моего главного окна во время запуска приложения. Моя главная проблема в том, что я не могу получить доступ к объекту главного окна.

 self.ui.MainWindow.resize(300,300)
 AttributeError: 'Ui_MainWindow' object has no attribute 'MainWindow'

Если я добавлю к ui_main.py файл:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.uiui = MainWindow

Я могу изменить размер моего главного окна с помощью:

self.ui.uiui.resize(300,300) 

Но я знаю, что очень плохо редактировать сгенерированный файл пользовательского интерфейса. Как я могу изменить размер моего главного окна без редактирования графического файла?

1 ответ

Решение

Модуль пользовательского интерфейса, созданный pyuic (через Qt Designer) - это простой вспомогательный класс с парой методов инициализации.

Оба метода берут экземпляр пользовательского класса верхнего уровня из Qt Designer (обычно QMainWindow), а затем добавьте все элементы пользовательского интерфейса в этот экземпляр. Это гарантирует, что все созданное в Qt Designer доступно из виджета верхнего уровня.

Так что ваши MyForm проходы подкласса self (пример QMainWindow) чтобы setupUi, который затем становится MainWindow переменная, которую вы видите в вашем пользовательском файле.

Это означает, что вы можете изменить размер основного окна, просто выполнив:

self.resize(300, 300)
Другие вопросы по тегам