PyQT中按钮和QGridLayout的问题

0 投票
1 回答
990 浏览
提问于 2025-04-18 01:23

我正在尝试创建一个简单的图形用户界面(GUI),这个界面分成三个垂直的部分,最上面的两个部分是QLabel,底下是一个按钮的网格。我的问题是,虽然按钮在网格中是横向排列的,但它们没有垂直扩展,无法填满整个单元格。

这是我的设置:

    app = QtGui.QApplication([])

    window = QtGui.QMainWindow()
    window.setWindowFlags(QtCore.Qt.FramelessWindowHint)
    window.setFixedSize(self.WINDOW_WIDTH,self.WINDOW_HEIGHT)

    centralWidget = QtGui.QWidget(window)
    window.setCentralWidget(centralWidget)


    LCD = QtGui.QLabel()
    LCD.setFixedSize(self.WINDOW_WIDTH, int(.32*self.WINDOW_HEIGHT))
    LCD.setAutoFillBackground(True)
    LCD.setAlignment(QtCore.Qt.AlignCenter)
    LCD.setText("LCD")

    palette = QtGui.QPalette()
    palette.setColor(QtGui.QPalette.Background,QtCore.Qt.red)
    palette.setColor(QtGui.QPalette.Foreground,QtCore.Qt.white)
    LCD.setPalette(palette)

    ticker= QtGui.QLabel()
    ticker.setFixedSize(self.WINDOW_WIDTH, int(.04*self.WINDOW_HEIGHT))
    ticker.setText("Ticker")
    ticker.setAlignment(QtCore.Qt.AlignCenter)

    buttonWidget = QtGui.QWidget()
    buttonWidget.setFixedSize(self.WINDOW_WIDTH, int(.64*self.WINDOW_HEIGHT))


    vbox = QtGui.QVBoxLayout(centralWidget)
    vbox.setContentsMargins(0,0,0,0)
    vbox.setSpacing(0)

    vbox.addWidget(LCD)
    vbox.addWidget(ticker)
    vbox.addWidget(buttonWidget)

    buttonGridbox = QtGui.QGridLayout(buttonWidget)
    buttonWidget.setLayout(buttonGridbox)
    for i in range(0,2):
        for j in range(0,2): 
            buttonGridbox.addWidget(QtGui.QPushButton("button "+ str(i)),i,j)



    centralWidget.setLayout(vbox)

    window.show()
    sys.exit(app.exec_())

这是我的输出结果(我用矩形框住了QLabel和QGridLayout,以便显示它们的区域):

result

1 个回答

1

你需要给它们设置 setSizePolicy,这样它们才能扩展,比如:

THE_BUTTON_OBJECT.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Preferred)

撰写回答