Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5:QVBoxLayout:如何将三个按钮组合成一个组?_Python_Qt_Pyqt5_Qpushbutton_Qvboxlayout - Fatal编程技术网

Python PyQt5:QVBoxLayout:如何将三个按钮组合成一个组?

Python PyQt5:QVBoxLayout:如何将三个按钮组合成一个组?,python,qt,pyqt5,qpushbutton,qvboxlayout,Python,Qt,Pyqt5,Qpushbutton,Qvboxlayout,因此,我制作了一个带有QVBoxLayout的简单PyQt5应用程序。显然,我添加的每个按钮都从一端延伸到另一端,并且它们都叠在一起。如何将按钮添加到QVBoxLayout,即屏幕上的一组三个小按钮?因此,您的按钮需要一个嵌套在QVBoxLayout中的QHBoxLayout: class Main(QMainWindow): def __init__(self, parent=None): super(Main, self).__init__(parent)

因此,我制作了一个带有QVBoxLayout的简单PyQt5应用程序。显然,我添加的每个按钮都从一端延伸到另一端,并且它们都叠在一起。如何将按钮添加到QVBoxLayout,即屏幕上的一组三个小按钮?

因此,您的按钮需要一个嵌套在
QVBoxLayout
中的
QHBoxLayout

class Main(QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.vLayout = QVBoxLayout(self.centralWidget)

        self.buttonsWidget = QWidget()
        self.buttonsWidgetLayout = QHBoxLayout(self.buttonsWidget)
        self.buttons = [QPushButton(c) for c in 'ABC']
        for button in self.buttons:
            self.buttonsWidgetLayout.addWidget(button)

        self.placeHolder = QWidget()
        self.placeHolder.setMinimumWidth(480)
        self.placeHolder.setMinimumHeight(320)
        self.placeHolder.setStyleSheet('* {background: red;}')

        self.vLayout.addWidget(self.placeHolder)
        self.vLayout.addWidget(self.buttonsWidget)

为了确保图元不会拉伸,可以使用特殊的 QSpacerItem元素

试试看:

from PyQt5 import Qt


class Widget(Qt.QWidget):

    def __init__(self):
        super().__init__()
        layout = Qt.QVBoxLayout(self)

        btn_layout = Qt.QHBoxLayout()
        # !!!
        btn_layout.addItem(Qt.QSpacerItem(0, 0, Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Minimum))

        btn1 = Qt.QPushButton("Button 1")
        btn2 = Qt.QPushButton("Button 2")
        btn3 = Qt.QPushButton("Button 3")

        btn_layout.addWidget(btn1)
        btn_layout.addWidget(btn2)
        btn_layout.addWidget(btn3)

        table = Qt.QTableWidget()
        table.setRowCount(5)
        table.setColumnCount(5)
        layout.addWidget(table)
        layout.addLayout(btn_layout)


if __name__ == '__main__':
    app = Qt.QApplication([])
    w = Widget()
    w.show()
    app.exec()

你有没有举个例子?你想要达到的目标的草图?是的!我在互联网上发现了这个(无法发布我的代码示例,因为我已经更改了它,试图实现我想要的)[link]顶部是我想要实现的,下面的三个按钮是我实现的好的,我在那里有一个交互式屏幕,所以按钮必须放在它下面(所以QVBoxLayout)否则它们会出现在屏幕的一侧,我有一个vtk渲染器,我需要三个按钮在下面。到目前为止,我只能在它的正下方实现三个H布局的长按钮,或者在它的侧面实现三个V布局的小按钮。但是我想在它下面放三个小的!非常感谢,添加到我的代码中,效果很好