Kivy GUI Замерзает - PullRequest
       40

Kivy GUI Замерзает

0 голосов
/ 23 апреля 2020

Мой KIVY- GUI зависает случайно, и я не слишком уверен, почему. Я изменяю пару виджетов со стороны python (т. Е. Включаю флажки, изменяю текстовый ввод текста и т. Д.), Иногда из циклов (т.е. включаю 6 флажков один за другим). Я думаю, что замораживание происходит главным образом, когда я отключаю много виджетов одновременно, однако это также происходит, когда я изменяю только один виджет. Зайдя в окно оболочки и нажав CTRL + C, я снова могу разморозить GUI. Иногда GUI затем вылетает со следующей ошибкой:

[INFO   ] [Base        ] Leaving application in progress...
 Traceback (most recent call last):
   File "GUI_MELC.py", line 637, in <module>
     GUI_MELC().run()
   File "C:\Python37\lib\site-packages\kivy\app.py", line 855, in run
     runTouchApp()
   File "C:\Python37\lib\site-packages\kivy\base.py", line 504, in runTouchApp
     EventLoop.window.mainloop()
   File "C:\Python37\lib\site-packages\kivy\core\window\window_sdl2.py", line 747, in mainloop
     self._mainloop()
   File "C:\Python37\lib\site-packages\kivy\core\window\window_sdl2.py", line 479, in _mainloop
     EventLoop.idle()
   File "C:\Python37\lib\site-packages\kivy\base.py", line 339, in idle
     Clock.tick()
   File "C:\Python37\lib\site-packages\kivy\clock.py", line 563, in tick
     current = self.idle()
   File "C:\Python37\lib\site-packages\kivy\clock.py", line 543, in idle
     usleep(1000000 * sleeptime)
   File "C:\Python37\lib\site-packages\kivy\clock.py", line 727, in usleep
     _usleep(microseconds, self._sleep_obj)
   File "C:\Python37\lib\site-packages\kivy\clock.py", line 405, in _usleep
     _kernel32.WaitForSingleObject(obj, 0xffffffff)
 KeyboardInterrupt

Некоторые примеры кода, как я отключаю виджеты (это, вероятно, наиболее интенсивно по часам, если вы можете так его назвать):

    guiElements = []
    temp=['redAll', 'greenAll', 'blueAll']
    guiElements.extend(temp)

    for i in range(6):
        temp1='red'+str(i)
        temp2='gre'+str(i)
        temp3='blu'+str(i)
        temp4='red'+str(i)+'Val'
        temp5='gre'+str(i)+'Val'
        temp6='blu'+str(i)+'Val'
        tempList=[temp1, temp2, temp3, temp4, temp5, temp6]
        guiElements.extend(tempList)

    def disableMainBoxGUI(self, status):
        #self.getGUIElements()
        for i in self.guiElements:
            self.ids[i].disabled = status

Есть ли способ избежать замерзания GUI? Должен ли я добавить time.sleep (XX) или что-то?

1 Ответ

0 голосов
/ 24 апреля 2020

Просто несколько простых советов - научитесь использовать многопоточность. Это не так сложно, и это очень поможет для прохождения длинных циклов. Я предлагаю прочитать это , чтобы ознакомиться. Многопоточность ускорит ваши приложения и устранит GUI зависание. Я использую ThreadPoolExececutor почти во всех моих проектах, но все, что вам нужно, - это простой поток демонов. Надеюсь, это помогло!

...