setColumnStretch和setRowStretch如何工作

阿比·萨尔维(Abhay Salvi)

我有一个使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

`>`和`>>`如何工作?

来自分类Dev

模数和rand()如何工作?

来自分类Dev

异步和等待如何工作

来自分类Dev

@PostFilter和@PreFilter如何工作

来自分类Dev

SEL和@selector如何工作?

来自分类Dev

GetStringUTFChars和ReleaseStringUTFChars如何工作?

来自分类Dev

swapcontext和getcontext如何工作?

来自分类Dev

LexicalEnvironment和VariableEnvironment如何工作?

来自分类Dev

fork和exec如何工作?

来自分类Dev

GetStringUTFChars和ReleaseStringUTFChars如何工作?

来自分类Dev

$ {0 ## * /}和$ {0%/ *}如何工作?

来自分类Dev

RouterLink和RouterLinkActive如何工作?

来自分类Dev

模板和 React 是如何工作的?

来自分类Dev

onBindViewHolder 和 RecyclerView 如何工作?

来自分类Dev

如何使SSRS和Chrome协同工作?

来自分类Dev

GDB rwatch和awatch命令如何工作?

来自分类Dev

如何使中继和反应路由正常工作?

来自分类Dev

FOSOAuthServerBundle和FOSUserBundle-如何使其工作?

来自分类Dev

“ tail -f”和logrotate如何工作?

来自分类Dev

HashSet和HashMap在Java中如何工作?

来自分类Dev

如何部署和运行oozie工作?

来自分类Dev

整个专属网络和CNSetSupportedSSID如何工作?

来自分类Dev

WriterT中的“通过”和“监听”如何工作?

来自分类Dev

IL中的float和double如何工作

来自分类Dev

javascript setInterval和setTimeout'threads'如何工作?

来自分类Dev

转换和泛型如何工作?

来自分类Dev

Unix中的malloc()和sbrk()如何工作?

来自分类Dev

MySQL Transactions和回滚如何工作?

来自分类Dev

参数和参数在Python中如何工作?