Qt5应用中的matplotib RectangleSelector图形故障

时间:2018-12-26 20:47:25

标签: python qt matplotlib pyside2

我尝试在Qt5应用程序中使用Matplotlib,并想使用RectangleSelector,但是根据参数useblit,我会出现图形故障或选择器消失。

但是,选择时,出现了一个奇怪的图形故障,整个图似乎都移到了左上角,在底部和右侧留了1cm的黑色(或者是透明的,如我的屏幕快照所示)。这是怎么回事?

enter image description here

复制

这将打开Qt5窗口,其中包含绘图和一些随机数据。一旦选择了一些数据,它就会-进行演示-清除轴并绘制一些新的东西。

如果设置useblit=False,则RectangleSelector将在第一个ax.clear()之后消失,如果设置useblit=True,则在选择时,底部和右侧的黑度约为1cm(请参见图片) )。

import sys
import matplotlib
import random
matplotlib.use('Qt5Agg')

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
#from matplotlib.widgets import SpanSelector
from matplotlib.widgets import RectangleSelector

class Window(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.figure = Figure()
        self.ax = self.figure.add_subplot(111)
        self.canvas = FigureCanvas(self.figure)

        # First data
        self.ax.plot([random.random() for _ in range(50)])

        # Embedding plot into Qt
        layout = QVBoxLayout()
        layout.addWidget(self.canvas)
        self.setLayout(layout)

        self.x = RectangleSelector(self.ax, self.onselect_xy,
                                   drawtype='box',
                                   useblit=False,     # or True?
                                   rectprops={'alpha':0.5, 'facecolor':'red'},
                                   interactive=True)

        self.canvas.draw()


    def onselect_xy(self, *args, **kwargs):
        self.ax.clear()
        self.ax.plot([random.random() for _ in range(50)])
        self.canvas.draw()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = Window()
    main.show()
    sys.exit(app.exec_())

版本

在macOS 10.13.6 HighSierra上,从conda list中进行选择:

python                    3.7.1                haf84260_7
pyside2                   5.6.0a1          py37h45ccf91_3    conda-forge
matplotlib                3.0.2            py37h54f8f79_0 

1 个答案:

答案 0 :(得分:1)

问题似乎是PySide2的旧版本,而最新版本却可以正常工作。另一方面,conda不允许使用最新版本的PySide2,因此您必须使用virtualenv并使用pip安装软件包。