由于它们的高度可定制性,我一直依赖于在构建appgui时使用多个groupbox。但Qgroupbox似乎对界面构建的速度有一定的影响。 现在有了layout的.insertLayout()方法,我可以构建一个完整的图形界面,将小部件放在任何我想要的地方。对话框感觉非常轻巧,重新绘制的速度非常快。不幸的是我找不到控制他们外表的方法。如果你能给我一些关于如何控制布局视觉属性的线索,我将不胜感激。我特别想知道:
如何绘制布局边框,如何控制边框线条宽度,
如何放置布局标题(类似于QGroupBox的.setTitle()所做的)
如何控制外部和内部页边距的布局。
如何使布局最小化/大小可恢复(这样当用户需要或不需要属于同一布局的某些小部件时,可以单击一些减号/箭头图标来折叠/展开布局。
下面是带有三个嵌套布局的示例。正如在对话框截图上看到的那样,由于没有边框、标题、分隔符等,因此无法从视觉上区分一个布局和另一个布局
from PyQt4 import QtGui, QtCore
class Dialog_01(QtGui.QMainWindow):
def __init__(self):
super(QtGui.QMainWindow,self).__init__()
tabWidget = QtGui.QTabWidget()
tabGroupBox = QtGui.QGroupBox()
tabLayout = QtGui.QVBoxLayout()
tabLayout.setContentsMargins(0, 0, 0, 0)
tabLayout.setSpacing(0)
subLayoutA=QtGui.QVBoxLayout()
tabLayout.insertLayout(0, subLayoutA)
tabGroupBox.setLayout(tabLayout)
tabWidget.addTab(tabGroupBox,' Tab A ')
listWidgetA = QtGui.QListWidget()
for i in range(3):
QtGui.QListWidgetItem( 'Item '+str(i), listWidgetA )
subLayoutA.addWidget(listWidgetA)
subLayoutB=QtGui.QHBoxLayout()
tabLayout.insertLayout(1, subLayoutB)
subLayoutB.addWidget(QtGui.QLineEdit('LineEdit 1'))
subLayoutB.addWidget(QtGui.QLineEdit('LineEdit 2'))
subLayoutC=QtGui.QVBoxLayout()
tabLayout.insertLayout(2, subLayoutC)
subLayoutC.addWidget(QtGui.QPushButton('PushButton 1'))
subLayoutC.addWidget(QtGui.QPushButton('PushButton 2'))
self.setCentralWidget(tabWidget)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dialog_1 = Dialog_01()
dialog_1.show()
dialog_1.resize(480,320)
sys.exit(app.exec_())
我在示例代码中插入了两行代码来实现sebastian提出的一个建议。间距边距方法组合可以有效地用于获得一些额外的调整完成。下面是一张截图(仍然无法去掉按钮周围的间距):
QLayout
子cases没有可视化的表示,这一点可以通过QLayout
类不继承{所以问题1、2和4的答案基本上是:你不能
你总是要有一个
QWidget
和一个QLayout
的组合。 E、 g.要将两个按钮组合成一个带有方框的框架,请使用QFrame:关于问题3,检查文档:
http://qt-project.org/doc/qt-4.8/qlayout.html#setContentsMargins
http://qt-project.org/doc/qt-4.8/qboxlayout.html#setSpacing
相关问题 更多 >
编程相关推荐