所以我开始玩Qt Designer来学习构建一些GUI,现在我用一个GUI玩了很多,这与我想要的功能很接近。当然在开始时我没有正确地做到这一点,并没有设置布局框,只是在我认为合适的地方播放我的按钮/标签等。现在我在想,让它可扩展性会很好,但我想知道这是不是很简单?或者从头开始以适当的布局更好?
这是定义它的外观的部分(减去retranslateUi方法,只是将名称放在标签/按钮上):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(715, 571)
self.toolButtonLoad = QtGui.QToolButton(Form)
self.toolButtonLoad.setGeometry(QtCore.QRect(40, 250, 23, 25))
self.toolButtonLoad.setObjectName(_fromUtf8("toolButtonLoad"))
self.prevButton = QtGui.QPushButton(Form)
self.prevButton.setGeometry(QtCore.QRect(70, 250, 98, 27))
self.prevButton.setObjectName(_fromUtf8("prevButton"))
self.nextButton = QtGui.QPushButton(Form)
self.nextButton.setGeometry(QtCore.QRect(180, 250, 98, 27))
self.nextButton.setObjectName(_fromUtf8("nextButton"))
self.horizontalSliderFrames = QtGui.QSlider(Form)
self.horizontalSliderFrames.setGeometry(QtCore.QRect(40, 280, 601, 29))
self.horizontalSliderFrames.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSliderFrames.setObjectName(_fromUtf8("horizontalSliderFrames"))
self.labelMain = QtGui.QLabel(Form)
self.labelMain.setGeometry(QtCore.QRect(70, 30, 531, 171))
self.labelMain.setObjectName(_fromUtf8("labelMain"))
self.labelBigIW = QtGui.QLabel(Form)
self.labelBigIW.setGeometry(QtCore.QRect(200, 350, 128, 128))
self.labelBigIW.setObjectName(_fromUtf8("labelBigIW"))
self.labelSmallIW = QtGui.QLabel(Form)
self.labelSmallIW.setGeometry(QtCore.QRect(70, 380, 64, 64))
self.labelSmallIW.setObjectName(_fromUtf8("labelSmallIW"))
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setText("Plot Correlation Matrix")
self.pushButton.setGeometry(QtCore.QRect(440, 350, 200, 50))
#self.labelCorr = QtGui.QLabel(Form)
#self.labelCorr.setGeometry(QtCore.QRect(440, 350, 221, 171))
#self.labelCorr.setObjectName(_fromUtf8("labelCorr"))
self.horizontalScrollBarIW = QtGui.QScrollBar(Form)
self.horizontalScrollBarIW.setGeometry(QtCore.QRect(300, 260, 341, 16))
self.horizontalScrollBarIW.setOrientation(QtCore.Qt.Horizontal)
self.horizontalScrollBarIW.setObjectName(_fromUtf8("horizontalScrollBarIW"))
self.verticalScrollBarIW = QtGui.QScrollBar(Form)
self.verticalScrollBarIW.setGeometry(QtCore.QRect(660, 20, 16, 231))
self.verticalScrollBarIW.setOrientation(QtCore.Qt.Vertical)
self.verticalScrollBarIW.setObjectName(_fromUtf8("verticalScrollBarIW"))
答案 0 :(得分:3)
创建当前ui文件的副本,并在Qt Designer中并排打开,以便比较结果。
根据您显示的示例代码,您可以使用以下步骤轻松添加布局:
这应该给你合理的初步结果,虽然你可能需要稍微调整一下才能达到你想要的效果。例如,要使窗口小部件(或子布局)跨越窗体的整个宽度,请选择它,然后使用拖动手柄根据需要拉伸它。
有关详细信息,请参阅Qt文档中的Layout Management概述。
<强>更新强>:
如果您继续编辑由pyuic
生成的模块,那么几乎可以保证它不会成为可扩展的&#34;。您应该将GUI定义与主应用程序逻辑完全分开,以便您可以使用Qt Designer更新ui文件并在必要时重新生成python模块。
因此,步骤0应该是从现有的python模块重新创建设计器ui文件。这可以使用QFormBuilder:
完成window = MainWindow()
stream = QtCore.QFile('mainwindow.ui')
stream.open(QtCore.QIODevice.WriteOnly)
QtDesigner.QFormBuilder().save(stream, window)
stream.close()
这可能并不总是完全重现当前的GUI,但它应该为您提供一个良好的起点。一旦你完成了整理,你可以从现有的python模块中提取非GUI代码,并将其移动到一个单独的模块中。有关如何将GUI与主应用程序代码集成的各种示例,请参阅PyQt4文档中的Using Qt Designer。