You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5如何自定义控件位置 将OK与Cancel按钮紧贴窗口底部

实现按钮固定在窗口底部的解决方案

实现原理

PyQt布局系统可通过拉伸因子(Stretch)分配容器内的剩余空间,不需要借助CSS即可实现控件固定位置的需求。你当前代码中垂直布局未设置拉伸规则,控件默认按插入顺序依次排列,因此按钮无法固定到底部。

核心修改点

  • 在垂直布局中插入预览图后,新增一个拉伸项,该拉伸项会占用所有垂直方向的剩余空间,将后续添加的按钮控件挤压到窗口最底部
  • 可在按钮的水平布局开头新增拉伸项,让按钮靠右对齐,符合常规桌面软件的交互习惯

完整可运行代码

import sys

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc

class MainWindow(qtw.QMainWindow):
    def __init__(self):
        super().__init__()
        self.preview_area = qtw.QWidget()
        self.preview_area.setLayout(qtw.QVBoxLayout())
        self.preview_area.layout().setContentsMargins(10,10,0,10)

        preview_title = qtw.QLabel("Preview")
        self.preview_area.layout().addWidget(preview_title)

        self.preview = qtw.QLabel(alignment=qtc.Qt.AlignCenter)
        self.preview.setFixedSize(320, 200)
        self.pixmap = qtg.QPixmap('temp.png')
        self.pixmap.scaled(
            300, 300, qtc.Qt.KeepAspectRatio, qtc.Qt.SmoothTransformation
        )

        self.preview.setPixmap(self.pixmap)

        self.buttons = qtw.QWidget()
        self.buttons.setLayout(qtw.QHBoxLayout())
        self.buttons.layout().setContentsMargins(0,0,0,0)
        self.buttons.layout().setSpacing(5)
        # 新增水平拉伸,将按钮推到布局右侧
        self.buttons.layout().addStretch()
        self.buttons.layout().addWidget(qtw.QPushButton("OK"))
        self.buttons.layout().addWidget(qtw.QPushButton("Cancel"))

        self.preview_area.layout().addWidget(self.preview)
        # 新增垂直拉伸,占用所有剩余垂直空间,将按钮挤到布局底部
        self.preview_area.layout().addStretch()
        self.preview_area.layout().addWidget(self.buttons)
    
        self.setCentralWidget(self.preview_area)
        self.show()

if __name__ == "__main__":
    app = qtw.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec_())

修改后窗口大小变化时,按钮会始终紧贴窗口底部。

内容的提问来源于stack exchange,提问作者オパラ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:06:02