plt.figure () влияет на кивое окно? - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь разработать приложение kivy для моих менее опытных коллег, которое использует приятный графический интерфейс для некоторых вычислений, которые я разработал для проекта;в настоящее время довольно странная проблема, с которой я сталкиваюсь, заключается в том, что функция plt.figure (), которую я вызываю для отображения некоторых данных в matplotlib.plotly, вызывает сжатие окна приложения 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

- графика.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 голосов
/ 29 июня 2019

Звучит так, как будто бы происходит следующее:

  • у вас дисплей с высоким разрешением
  • приложение kivy рассматривает его как дисплей с низким разрешением и разрешает ОСувеличить его
  • когда matplotlib создает окно, оно запрашивает другую конфигурацию из оконного менеджера (без растяжения)
  • , новая конфигурация также применяется к окну Kivy

Я не уверен точно, какой была бы последовательность событий, и это могло фактически произойти из-за ошибки где-то, но это похоже на правдоподобную причину этого.

Если это так, яне знаю, что за починкаПотребуется некоторое тестирование на той же ОС с сопоставимой настройкой дисплея.Какую ОС вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...