2

我需要帮助。我在 QT Designer 中添加了两个按钮,然后我使用了水平布局。Ctrl + R - 一切看起来都很好。

然后我将表单转换为 Python:

pyuic4.bat Form2.ui > Form2.py

并运行应用程序。布局似乎不起作用。所有按钮都被覆盖。

表单的 py 代码(我没有更改任何内容):

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(383, 222)
        self.horizontalLayout = QtGui.QHBoxLayout(Form)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtGui.QPushButton(Form)
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        self.horizontalLayout.addWidget(self.pushButton_2)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.pushButton.setText(_translate("Form", "PushButton 1", None))
        self.pushButton_2.setText(_translate("Form", "PushButton 2", None))

以及应用程序的代码:

import sys
from PyQt4 import QtCore, QtGui
from Form2 import Ui_Form

class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

我将不胜感激任何帮助。再见,沃伊泰克

4

2 回答 2

2

文档

QMainWindow 有自己的布局...布局有一个中心区域,可以被任何类型的小部件占据。

QMainWindow 布局

**Creating a main window without a central widget is not supported.**

需要阅读的一些内容:

  1. 您不能更改 QMainWindow 的布局。
  2. 您需要一个中央小部件来管理所有其他小部件。

因此,通过添加一个中央小部件并在该小部件上运行 setupUi 来更改您的应用程序以反映这一点。

class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        central_widget = QtGui.QWidget()
        self.setCentralWidget(central_widget) # new central widget
        self.ui = Ui_Form()
        self.ui.setupUi(central_widget)  # target central_widget for UI setup
于 2013-08-14T16:19:01.677 回答
1

好的,虽然上面的帮助有效,但我已经找到了为什么我没有通过 Qt Designer 获得预期的布局结果。原因很简单,我使用了小部件(表单)而不是主窗口。在主窗口布局工作正常。

于 2013-08-16T07:57:48.563 回答