微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Pyqtgraph中设置图表的拉伸因子?

如何解决如何在Pyqtgraph中设置图表的拉伸因子?

现在,应用程序显示两个高度相同的图形:

enter image description here

代码

import sys
from PyQt5 import QtWidgets,uic
from PyQt5.QtWidgets import QListWidget,QVBoxLayout,QMainWindow
import pyqtgraph as pg


class Draw_interface(QMainWindow):
    def __init__(self):
        global time_update

        super(Draw_interface,self).__init__()
        uic.loadUi('charts.ui',self)

        # Add two charts
        self.my_draw = pg.GraphicslayoutWidget(show=True)
        self.p1 = self.my_draw.addplot(row=0,col=0,stretch=3)
        self.p2 = self.my_draw.addplot(row=1,stretch=1)

        # Set widget for chart
        my_layout = QVBoxLayout()
        my_layout.addWidget(self.my_draw)
        self.frame_for_charts.setLayout(my_layout)

        # Draw charts
        y = [2.2,3.0,1.3,2.5,1.9,2.2,5.5,6.6]
        y2 = [2.3,3.3,2.8,3.1,4.4]
        curve1 = self.p1.plot(y)
        curve2 = self.p2.plot(y2)

        self.show()

my_app = QtWidgets.QApplication([])
my_main_window = Draw_interface()
sys.exit(my_app.exec_())

stretch=3stratch=1-不会产生理想的效果

如何正确设置拉伸因子,以使上图为高度的75%,下图为高度的25%? 就像这样:

enter image description here

也许:

self.my_draw.itemAt(0,0).setGeometry(x1,y1,x2,y2)
self.my_draw.itemAt(0,0).updateGeometry()

但这显然不是最佳选择。

解决方法

addPlot 方法没有像“stretch”或“stratch”这样的参数。

如果你想使用GraphicsLayoutWidget,你可以添加空标签来占用下一列的空间作为网格的参考。(有点hacky...)

或者您可以将 2 个 plotwidget 放在 QVBoxLayout 中并在 addWidgets 方法中使用“stretch”参数。

使用 QVBoxLayout 的结果更准确。

GraphicsLayoutWidget 解决方案。 enter image description here

import sys
from PyQt5 import QtWidgets,QtCore
import pyqtgraph as pg


class Draw_interface(QtWidgets.QMainWindow):
    def __init__(self):

        super(Draw_interface,self).__init__()
  
        # Add two charts
        self.my_draw = pg.GraphicsLayoutWidget(show=True)
        self.p1 = self.my_draw.addPlot(row=0,col=0,rowspan = 3)
        self.p2 = self.my_draw.addPlot(row=3,col=0)

        # Add label with no text to take up spaces of the next column 
        self.p3 = self.my_draw.addLabel(text='',row=0,col=1)
        self.p4 = self.my_draw.addLabel(text='',row=1,col=1)
        self.p5 = self.my_draw.addLabel(text='',row=2,col=1)
        self.p6 = self.my_draw.addLabel(text='',row=3,col=1)
        
        # Draw charts
        y = [2.2,3.0,1.3,2.5,1.9,2.2,5.5,6.6]
        y2 = [2.3,3.3,2.8,3.1,4.4]
        self.p1.plot(y)
        self.p2.plot(y2)
        self.setCentralWidget(self.my_draw)
        
    
def main():
    QtWidgets.QApplication.setAttribute(QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
    app = QtWidgets.QApplication(sys.argv)
    
    main = Draw_interface()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

QVBoxLayout 解决方案。 enter image description here

import sys
from PyQt5 import QtWidgets,self).__init__()
  
        # Add two charts
        p1 = pg.PlotWidget(name = "Plot1")
        p2 = pg.PlotWidget(name = "Plot2")
        
        # Draw charts
        y = [2.2,4.4]
        p1.plot(y)
        p2.plot(y2)

        l = QtWidgets.QVBoxLayout()
        l.addWidget(p1,stretch=3)
        l.addWidget(p2,stretch=1)

        w = QtWidgets.QWidget()
        w.setLayout(l)
        self.setCentralWidget(w)
        self.setStyleSheet("QWidget { background-color: black; }")
    
def main():
    QtWidgets.QApplication.setAttribute(QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
    app = QtWidgets.QApplication(sys.argv)
    
    main = Draw_interface()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?