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,提问作者オパラ
相关产品推荐
相关产品推荐

