2

我在ui_main.py文件中有一个 gui(在 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) 

但我知道编辑生成的 ui 文件非常糟糕。如何在不编辑 gui 文件的情况下调整主窗口的大小?

4

1 回答 1

3

由(通过 Qt Designer)创建的 ui 模块pyuic只是一个简单的辅助类,带有几个初始化方法。

这两种方法都从 Qt Designer 中获取一个顶级 ui 类的实例(通常是 a QMainWindow),然后所有 ui 元素添加该实例中。这确保了在 Qt Designer 中创建的所有内容都可以从顶级小部件访问。

因此,您的MyForm子类将self(的实例QMainWindow)传递给setupUi,然后它成为MainWindow您在 ui 文件中看到的变量。

这意味着您只需执行以下操作即可调整主窗口的大小:

self.resize(300, 300)
于 2012-08-31T17:23:46.740 回答