plt.figure()是否影响kivy窗口?

时间:2019-06-29 02:25:58

标签: python user-interface matplotlib kivy

我正在尝试为那些不太精明的同事开发一个kivy应用程序,该应用程序围绕我为项目开发的一些计算包装了一个不错的GUI;当前,我遇到的一个比较奇怪的问题是,我在matplotlib.plotly中调用的plt.figure()函数在图形上绘制了一些数据,这导致kivy应用程序窗口缩小。使用Config.set()锁定大小不会禁止此操作。知道为什么会这样吗?奇怪的是,缩小似乎增加了kivy应用程序的分辨率,从而使窗口更清晰,更易于阅读,这实际上是一种不错的选择。只是想了解这里发生了什么以及如何使用它。下面是重现现象的示例。

-GUI.py-

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.popup import Popup
import threading
from calc import main


class Pop(Popup):
    pass


class MetaLevel(GridLayout):

    def dummy(self, *args):
        App.get_running_app().pop.open()
        threading.Thread(target=self.calculate, args=(args,)).start()

    def calculate(self, *args):
        main()


class graphics(App):
    def build(self):
        self.pop = Pop()
        return MetaLevel()


if __name__ == "__main__":
    graphics().run()

-calc.py-

def main():
    import numpy as np
    import matplotlib.pyplot as plt
    from kivy.app import App
    from pathos.multiprocessing import ProcessPool as Pool

    grid = np.array([(m, n)
                     for m in np.arange(1, 100, 1)
                     for n in np.arange(1, 100, 1)])

    def calc(grid):
        var1 = grid[0]
        var2 = grid[1]
        y = var1*var2
        return y

    res = Pool().map(calc, grid)

    fig = plt.figure(111, dpi=200)
    print('done')
    App.get_running_app().pop.dismiss()
    # data output from res here

-graphics.kv-

# Custom button
<Button>:
    font_size: 12

<MetaLevel>:
    id: calculator
    rows: 5
    padding: 10
    spacing: 10

    BoxLayout:
        height: 10
        Label:
            spacing: 10
            text: 'test'

    BoxLayout:
        Button:
            id: run_button
            text: "Run"
            on_release: root.dummy()

1 个答案:

答案 0 :(得分:0)

听起来可能正在发生以下情况:

  • 您的dpi分辨率很高
  • kivy应用程序将其视为低dpi显示器,并让操作系统按比例放大
  • 当matplotlib创建窗口时,它会向窗口管理器请求不同的配置(不进行拉伸)
  • 新配置也适用于Kivy窗口

我不确定事件的顺序是什么,这实际上可能是某个地方的错误引起的,但这似乎是发生这种情况的合理原因。

如果是这种情况,我不知道解决方法是什么。它需要在具有类似显示设置的同一操作系统上进行一些测试。您正在使用什么操作系统?