【问题标题】:PyQt5: QVBoxLayout: how to make three buttons as a group?PyQt5:QVBoxLayout:如何将三个按钮作为一组?
【发布时间】:2018-10-12 20:50:49
【问题描述】:

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

【问题讨论】:

  • 你有例子吗?您想要实现的目标的草图?
  • 是的!我在网上找到了这个(不能贴出我的代码示例,因为我已经改了,试图实现我想要的)[链接]bogotobogo.com/Qt/images/LayoutsWithoutDesigner/…顶部是我想要实现的,下面的三个按钮是我想要的实现了

标签: python qt pyqt5 qpushbutton qvboxlayout


【解决方案1】:

所以你的按钮需要一个QHBoxLayout,嵌套在QVBoxLayout中:

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)

【讨论】:

  • 好吧,我有一个交互式屏幕,所以按钮必须在它下面(所以 QVBoxLayout),否则它们会在那个屏幕的一侧
  • 我在那里有一个 vtk renderwindowinteractor,我需要三个按钮才能进入它。到目前为止,我只能在其正下方以 H 布局实现三个长按钮,或在其侧面以 V 布局实现小按钮。但我想在它下面放三个小的
  • 太棒了!非常感谢,添加到我的代码中,它工作了
【解决方案2】:

为确保元素不被拉伸,可以使用特殊的 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2015-07-27
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多