【发布时间】:2021-05-09 23:56:54
【问题描述】:
我正在使用 pyqtgraph 绘制一些数据,并注意到当我将绘图从笔记本电脑屏幕移动到第二台显示器时,绘图上的缩放会受到影响:
请注意,轴已“压缩”,并且绘图不再在第二个监视器上正确缩放。
我发现其他人在网上报告了类似的问题,但找不到任何真正的解决方案。建议的一种解决方案是使显示器的分辨率相同。我不喜欢这种解决方案,因为我不得不牺牲笔记本电脑的分辨率来容纳分辨率较低的外接显示器。
我发现的另一个解决方案是在如下所示实例化 Qapplication 之前将行 app.setAttribute(QtCore.Qt.AA_Use96Dpi) 添加到主循环中,据称让 Qt 忽略操作系统的 DPI 设置:
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
app.setAttribute(QtCore.Qt.AA_Use96Dpi)
MainWindow =GraphWindow()
MainWindow.show()
sys.exit(app.exec_())
起初这似乎可行,因为绘制的数据在轴上正确缩放。但是,它似乎并没有真正起作用——添加这条线会影响笔记本电脑上轴的缩放,如下所示(现在在 x 轴上跨 0 到 7000 的轴上绘制相同的数据,并且 - Y轴上2到-26dB):
但在将绘图移到第二台显示器上时确实“修复”了该问题,使其看起来像上面显示的第一个“原始”笔记本电脑绘图。
这尤其令人担忧,因为在app.setAttribute(QtCore.Qt.AA_Use96Dpi) 指令之后的笔记本电脑输出“看起来”正确,但却歪曲了实际数据。当我第一次绘制数据时,我很容易错过这个指令。
无论操作系统的 DPI 设置和显示器分辨率如何,正确显示绘图的正确方法是什么?很奇怪,绘制的数据似乎与轴值无关。
这是一个最小的可重复样本:
from PyQt5 import QtWidgets, QtCore
from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg
import sys # We need sys so that we can pass argv to QApplication
import os
from numpy.random import seed
from numpy.random import randint
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.graphWidget = pg.PlotWidget()
self.setCentralWidget(self.graphWidget)
x = [1,2,3,4,5,6,7,8,9,10]
seed(1)
y = randint(5,35,10)
# plot data: x, y values
self.graphWidget.plot(x, y)
def main():
app = QtWidgets.QApplication(sys.argv)
app.setAttribute(QtCore.Qt.AA_Use96Dpi)
main = MainWindow()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
【问题讨论】:
标签: python plot pyqt5 screen-resolution pyqtgraph