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

PyQt5技术问题:如何将PlotWidget置于按钮下方而非后方

布局调整方案

问题根源是你混合使用了布局管理器和绝对定位(setGeometry),导致PlotWidget被绝对定位的按钮覆盖。要解决这个问题,需要统一使用布局管理器规划所有控件位置,以下是调整后的代码:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.resize(1710, 650)
        MainWindow.setWindowTitle('StarBot')

        self.centralwidget = QWidget()
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)

        # 主布局:左右分栏
        main_layout = QHBoxLayout(self.centralwidget)
        main_layout.setSpacing(20)
        main_layout.setContentsMargins(20, 30, 20, 20)

        # 左侧区域布局
        left_layout = QVBoxLayout()
        left_layout.setSpacing(20)

        # 顶部按钮与portfolio_value的横向布局
        top_bar_layout = QHBoxLayout()
        top_bar_layout.setSpacing(10)

        self.pushButton = QPushButton()
        self.pushButton.setFixedSize(150, 41)
        self.pushButton.setObjectName("pushButton")
        self.pushButton.setStyleSheet(
            '''background-color: #202025; 
            border-width: 1px; 
            border-style: solid; 
            border-color:  #202025;''')
        self.pushButton.setText('START')
        top_bar_layout.addWidget(self.pushButton)

        self.portfolio_value = QPlainTextEdit()
        self.portfolio_value.setFixedHeight(41)
        self.portfolio_value.setObjectName("portfolio_value")
        self.portfolio_value.setStyleSheet(
            '''background-color: #202025; 
            border-width: 1px; 
            border-style: solid; 
            border-color:  #202025;''')
        top_bar_layout.addWidget(self.portfolio_value)

        left_layout.addLayout(top_bar_layout)

        # 添加PlotWidget到左侧布局,位于按钮下方
        self.plot_widget = pg.PlotWidget()
        left_layout.addWidget(self.plot_widget)

        # 添加output控件
        self.output = QPlainTextEdit()
        self.output.setFixedHeight(91)
        self.output.setObjectName("output")
        self.output.setStyleSheet(custom_style)
        left_layout.addWidget(self.output)

        # 右侧historical_data
        self.historical_data = QPlainTextEdit()
        self.historical_data.setObjectName("historical_data")
        self.historical_data.setStyleSheet(custom_style)
        self.historical_data.setPlainText(text)
        main_layout.addWidget(self.historical_data, stretch=1)

        # 将左侧布局加入主布局
        main_layout.addLayout(left_layout, stretch=1)

        MainWindow.setStyleSheet(
            '''background-color: #252526; 
            border-width: 1px; 
            border-style: solid;''')

        QtCore.QMetaObject.connectSlotsByName(MainWindow)


if __name__ == "__main__":
    import sys
    import pyqtgraph as pg
    from PyQt5 import QtCore, QtWidgets

    custom_style = """/* 补充你原有的custom_style样式定义 */"""
    text = """/* 补充你原有的text文本内容 */"""

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

关键改动说明:

  • 移除所有setGeometry调用,改用布局管理器自动控制控件位置与大小
  • 用QHBoxLayout作为主布局,将界面分为左右两栏
  • 左侧用QVBoxLayout垂直排列控件:顶部横向布局(按钮+portfolio_value)→ PlotWidget → output
  • 通过stretch参数控制左右栏宽度比例,用fixedSize/fixedHeight保留原控件尺寸设定
  • 所有控件均通过布局管理器添加,彻底解决层级覆盖问题

内容的提问来源于stack exchange,提问作者ms mavie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:24:24