Matplotlib全屏不适用于Qt EGLFS

时间:2018-07-26 16:56:41

标签: python-3.x qt matplotlib pyqt5 raspberry-pi3

我正在使用带有raspbian jessie的raspberry pi 3,并交叉编译了Qt 5.6.4和PyQt5来制作嵌入式设备,在我的应用程序上,一切正常,它使用EGLFS驱动程序,因此没有运行X服务器(我停用了它),但是,在我的应用程序上,我有一个按钮可以打开matplotlib图,该图配置为全屏显示,并且在X服务器上运行良好(我运行的第一个测试),但是,现在我在使用不带x服务器的eglfs时,绘图显示在屏幕的左上角,我将发布图片和图形代码。

Look at the Top-Left corner for the graph

我的代码:

import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
import datetime as dt
import numpy as np
import matplotlib.dates as md
from matplotlib.widgets import Button


def graph():

    x = [dt.datetime(2018, 7, 7, 17, 59), dt.datetime(2018, 7, 7, 18, 4), dt.datetime(2018, 7, 7, 19, 9),
    dt.datetime(2018, 7, 7, 19, 14), dt.datetime(2018, 7, 7, 20, 19), dt.datetime(2018, 7, 7, 20, 24),
    dt.datetime(2018, 7, 7, 20, 29), dt.datetime(2018, 7, 7, 21, 34), dt.datetime(2018, 7, 7, 21, 39),
    dt.datetime(2018, 7, 7, 22, 44)]
    y = [72,68,145,156,184,160,210,230,215,222]
    highest = max(y)
    lowest = min(y)
    xlen = len(x)
    lastdate = xlen - 1
    deltah = dt.timedelta(minutes = 17)
    figfuel, ax = plt.subplots()
    ax.plot(x,y, label ='Cb-Ft per hour')
    ax.axhline(highest, color='r', linestyle='--', label='Last 24h max Comsumption')
    ax.text(x[lastdate] + deltah, highest, str(highest), va='center', ha="left", bbox=dict(facecolor="w",alpha=0.5))
    ax.axhline(lowest, color='c', linestyle='--', label='Last 24h min Comsumption')
    ax.text(x[lastdate] + deltah, lowest, str(lowest), va='center', ha="left", bbox=dict(facecolor="w",alpha=0.5))
    #plt.plot(x,y, label='Cb-Ft per hour')
    plt.connect('button_press_event', efecto)

    plt.subplots_adjust(bottom=0.2)
    plt.ylabel('Fuel Comsumption (Cb-ft per hour)')
    plt.xlabel('Time (h)')
    plt.title('Fuel Comsumption Chart')
    plt.grid(True)
    plt.legend()
    plt.xticks(rotation=90)
    figManager = plt.get_current_fig_manager()
    figManager.window.showFullScreen()
    xformatter = md.DateFormatter('%H:%M')
    xlocator = md.MinuteLocator(byminute=[0,60], interval = 1)
    ax.xaxis.set_major_locator(xlocator)
    plt.gcf().axes[0].xaxis.set_major_formatter(xformatter)
    #axcut = plt.axes([0.7, 0.05, 0.1, 0.075])
    #axcut = plt.axes([0.885, 0.015, 0.1, 0.075])
    #bcut = Button(axcut, 'Close')
    #bcut.on_clicked(efecto)
    plt.show()

def efecto(event):
    plt.close()

有人可以帮我弄清楚为什么会这样吗?

编辑:

在运行python脚本时,EGLFS告诉我它无法获取屏幕的物理尺寸,我将用它来查看它是否有所改变

编辑2:

在EGLFS上以正确的大小运行脚本后,会发生相同的事情,因此与之无关,任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我要回答我自己的问题,似乎Embedded Qt的pyplot模块有问题,因此当我执行matplotlib脚本时,由于没有X服务器,它只是无法正确地适应屏幕,因此我进行了测试与X服务器配合使用,一切正常。

现在,如果您不想使用X服务器(像我一样),则需要将MatPlotlib python小部件用于Qt设计器,因此您可以创建带有小图的QWidget或QMainWindow,然后,您可以创建一个python脚本,将所需的所有内容添加到该绘图中,它将作为另一个Qt窗口,但您的绘图是所需的。