使用matplotlib的Pyqt应用程序在不同的监视器中使用时会出现奇怪的行为

0yycz8jy  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(96)

我正在创建一个Pyqt应用程序,在加载应用程序时绘制一个空图,然后在每次按下按钮时绘制一些数据。
以下是我目前最小的工作示例:

import matplotlib.pyplot as plt
from random import random
from PyQt6 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg

class Window(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.resize(1126, 568)
        self.centralwidget = QtWidgets.QWidget()
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.pushButtonConnect = QtWidgets.QPushButton("Connect")
        self.gridLayout.addWidget(self.pushButtonConnect, 0, 0, 1, 1)
        self.setCentralWidget(self.centralwidget)
        self.fig, self.ax = plt.subplots()
        self.canvas = FigureCanvasQTAgg(self.fig)
        self.gridLayout.addWidget(self.canvas, 0, 1, 1, 1)
        self.pushButtonConnect.clicked.connect(self.runGraph)
        self.ax.set_xlim([0, 1])
        self.ax.set_ylim([0, 1])

    def runGraph(self):
        canvas_new = FigureCanvasQTAgg(self.fig)
        plt.plot([random(), random()], [random(), random()])
        self.gridLayout.replaceWidget(self.canvas, canvas_new)
        self.canvas = canvas_new

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    win = Window()
    win.show()
    app.exec()

字符串
它给出了一个应用程序,在5次按钮点击looks like this后。
但是,如果在我的笔记本电脑屏幕上打开相同的应用程序(而不是在我的外部显示器上),每次我点击按钮,每行都会变大,5次点击后looks like this
甚至更多:如果我尝试调整主窗口的大小:

self.resize(1126, 568)


在我的显示器looks normal after 5 clicks上,但在我的笔记本电脑屏幕it looks like this上,就像它在调整网格的大小,如果我点击按钮。
我做错了什么,还是matplotlib+Pyqt的bug?
先谢谢你。

1rhkuytd

1rhkuytd1#

正如rend95在评论中所建议的那样,简单地使用self.canvas.draw()就可以完成工作并解决问题。现在函数是:

def runGraph(self):
    plt.plot([random(), random()], [random(), random()])
    self.canvas.draw()

字符串
另一方面,我的笔记本电脑奇怪行为的谜团将继续悬而未决。

相关问题