【问题标题】:Kivy: Running the Kivy app with window minimized triggers an error on app closure. Why?Kivy:在窗口最小化的情况下运行 Kivy 应用程序会在应用程序关闭时触发错误。为什么?
【发布时间】:2021-06-18 01:09:53
【问题描述】:

仅当我将窗口设置为最小化时,Kivy 2.0 才会发出错误。

通常,Kivy 会优雅地关闭,控制台上没有回溯或错误信息。 但最近,我添加了一个功能,可以在最小化窗口的情况下启动 kivy 应用程序: 有两种方法可以做到(关闭应用程序时都会出错):

  1. 调用Window.minimize()函数
  2. 设置 kivy 配置如下:Config.set('graphics', 'window_state', 'minimized')

窗口最小化没有问题,但是当我使用上述任何一种方法关闭应用程序时,Kivy 控制台输出此错误消息:

 Traceback (most recent call last):
   File "C:\Users\User\Desktop\Project\main_app\main.py", line 501, in <module>        
     mainApp.run()
   File "C:\Users\User\Desktop\Project\main_app\.env\lib\site-packages\kivy\app.py", line 950, in run
     runTouchApp()
   File "C:\Users\User\Desktop\Project\main_app\.env\lib\site-packages\kivy\base.py", line 584, in runTouchApp
     stopTouchApp()
   File "C:\Users\User\Desktop\Project\main_app\.env\lib\site-packages\kivy\base.py", line 625, in stopTouchApp
     EventLoop.close()
   File "C:\Users\User\Desktop\Project\main_app\.env\lib\site-packages\kivy\base.py", line 186, in close
     self.stop()
   File "C:\Users\User\Desktop\Project\main_app\.env\lib\site-packages\kivy\base.py", line 198, in stop
     provider.stop()
   File "C:\Users\User\Desktop\Project\main_app\.env\lib\site-packages\kivy\input\providers\wm_pen.py", line 114, in stop
     SetWindowLong_WndProc_wrapper(self.hwnd, self.old_windProc)
   File "C:\Users\User\Desktop\Project\main_app\.env\lib\site-packages\kivy\input\providers\wm_common.py", line 112, in _closure
     oldAddr = func(hWnd, GWL_WNDPROC, cast(wndProc, c_void_p).value)
 ctypes.ArgumentError: argument 3: <class 'TypeError'>: wrong type

这是怎么回事?

这是我使用的环境:

Python:3.9.4 (tags/v3.9.4:1f2e308, Apr 4 2021, 13:14:17) [MSC v.1928 32 bit (Intel)] on win32

基维:2.0.0

这是您重新创建错误所需的内容:

from kivy.app import App
from kivy.uix.button import Button
from kivy.config import Config
Config.set('graphics', 'window_state', 'minimized')


class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

运行此应用并关闭它。

感谢任何帮助。

【问题讨论】:

    标签: python-3.x kivy


    【解决方案1】:

    这看起来像一个错误。这是一种解决方法。我注意到是否允许窗口以其默认大小打开,然后将其最小化。没有错误。此示例在打开窗口后将其最小化。您可以添加一两秒并显示一些信息,例如启动屏幕 - 然后最小化窗口。

    from kivy.app import App
    from kivy.uix.button import Button
    from kivy.core.window import Window
    from kivy.clock import Clock
    
    
    class TestApp(App):
        def build(self):
            return Button(text='Hello World')
    
        def on_start(self):
            Clock.schedule_once(self.win_min, 0)  # increase time to create a splash screen effect...
    
        def win_min(self, dt):
            Window.minimize()
    
    
    TestApp().run()
    

    【讨论】:

    • 感谢您的回答。它确实看起来像一个错误,我在 github 上打开了一个新问题。但我需要从最小化窗口开始,然后在以后关闭它。感谢您的回答,但没有帮助。
    • 我面临着完全相同的问题,并且从最小化窗口开始。 @Beki,您找到解决方法了吗?
    • @BillBridge 不,目前没有回复。我只是保持原样-在应用关闭时显示错误消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    相关资源
    最近更新 更多