我有一个使用PySide2
它来setColumnStretch
进行列拉伸和setRowStretch
行拉伸的应用程序。它工作的很好,但是我无法理解它是如何工作的。我指的是qt文档,但对我没有帮助。我被那些括号内的两个值所困扰。
例如 :
glay = QtWidgets.QGridLayout(right_container)
glay.addWidget(lineedit, 0, 0)
glay.addWidget(button2, 0, 2)
glay.addWidget(widget, 2, 0, 1, 3)
glay.addWidget(button, 4, 0)
glay.addWidget(button1, 4, 2)
glay.setColumnStretch(1, 1) # setColumnStretch
glay.setRowStretch(1, 1) # setRowStretch
glay.setRowStretch(2, 2) # setRowStretch
glay.setRowStretch(3, 1) # setRowStretch
产生的输出如下图所示:
但是如何?内部的这四个值有glay.addWidget(widget, 2, 0, 1, 3)
什么作用?请举例说明所有这些。
简短答案:请阅读Qt文档:https : //doc.qt.io/qt-5/qgridlayout.html,因为它清晰准确。
长答案:
addWidget()
:
addWidget方法是重载的(该概念本身在C ++中存在,但可以在python中构建,但默认情况下不存在),这意味着方法(或函数)根据参数的不同而具有不同的行为,在这种情况下:
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
第一种方法指示小部件将放置在项目所占据的“行”和“列”位置,第二种方法可以指示其所占据的行数或列数,它们等效于:
def addWidget(self, row, column, rowSpan = 1, colSpan = 1, alignment = Qt.Alignment()):
pass
因此,lay.addWidget(widget, 2, 0, 1, 3)
这意味着“小部件”将放置在位置2x0处,并将占据1行3列。
import random
import sys
from PyQt5 import QtGui, QtWidgets
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
glay = QtWidgets.QGridLayout(w)
elements = (
(0, 0, 1, 1), # Position: 0x0 1 rowspan 1 colspan
(1, 0, 1, 1), # Position: 1x0 1 rowspan 1 colspan
(0, 1, 2, 1), # Position: 0x1 2 rowspan 1 colspan
(2, 0, 1, 2), # Position: 2x0 1 rowspan 2 colspan
)
for i, (row, col, row_span, col_span) in enumerate(elements):
label = QtWidgets.QLabel("{}".format(i))
color = QtGui.QColor(*random.sample(range(255), 3))
label.setStyleSheet("background-color: {}".format(color.name()))
glay.addWidget(label, row, col, row_span, col_span)
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
setColumnStretch()
和setRowStretch()
:
默认情况下,如果QGridLayout填充有相同的小部件,并且rowSpan和columnSpan为1,则所有小部件的大小都相同,但是很多时候您希望小部件占用更多空间,或者大小成比例。为了理解逻辑,我将使用以下代码:
import random
import sys
from PyQt5 import QtGui, QtWidgets
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
glay = QtWidgets.QGridLayout(w)
for i in range(3):
for j in range(3):
label = QtWidgets.QLabel("{}x{}".format(i, j))
color = QtGui.QColor(*random.sample(range(255), 3))
label.setStyleSheet("background-color: {}".format(color.name()))
glay.addWidget(label, i, j)
glay.setRowStretch(0, 1)
glay.setRowStretch(1, 2)
glay.setRowStretch(2, 3)
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
确定第一列的长度为1,第二列的长度为2,第三列的长度为3,这是行的大小之比1:2:3
如果将stretch设置为0,会发生什么?好吧,它将占据最小尺寸,并且拉伸大于0的那些将保持比例:
glay.setRowStretch(0, 0)
glay.setRowStretch(1, 1)
glay.setRowStretch(2, 2)
相同的概念适用于setColumnStretch()。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句