我刚刚在Windows 7和Python 2.7上启动了一个简单的PyQt应用程序。有2个按钮和一个表。 Apple按钮应该比Orange按钮高5倍,并且桌子应该与Apple按钮的高度相同。
但是,尽管使用grid.addWidget(appleBtn, 0, 0, 5, 1)
来定义其高度,但两个按钮的绘制高度相同。
有什么建议吗?
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
def main():
app = QApplication(sys.argv)
w = QTabWidget()
# Tab
grid = QGridLayout()
tab = QWidget()
tab.setLayout(grid)
w.addTab(tab,"Hello World")
# Button 1
appleBtn = QPushButton("Apples")
appleBtn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
grid.addWidget(appleBtn, 0, 0, 5, 1)
# Button 1
orangeBtn = QPushButton("Oranges")
appleBtn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
grid.addWidget(orangeBtn, 5, 0, 1, 1)
# Table
fruitTable = QTableWidget()
fruitTable.setRowCount(5)
fruitTable.setColumnCount(2)
fruitTable.setHorizontalHeaderLabels(QString("Fruit;Color;").split(";"))
fruitTable.horizontalHeader().setResizeMode(QHeaderView.Stretch)
grid.addWidget(fruitTable, 6, 0, 1, 1)
w.resize(400,300)
w.setWindowTitle('Test')
w.show()
sys.exit(app.exec_())
main()
答案 0 :(得分:2)
addWidget
方法不会以您的假设方式运作。第二个和第三个参数指定行/列,而第三个和第三个参数指定要跨越的行数/列数。
指定比例高度的正确方法是setRowStretch
:
grid.addWidget(appleBtn, 0, 0)
grid.setRowStretch(0, 5)
...
grid.addWidget(orangeBtn, 1, 0)
...
grid.addWidget(fruitTable, 2, 0)
grid.setRowStretch(2, 5)