我将Spyder的IPython控制台中的kivy包用于Anaconda导航器。打开Spyder后,如果我使用runfile(path,wdir = cwd),我的代码将毫无问题地运行。但是在关闭弹出窗口后,如果我再次尝试运行该文件,则会收到错误消息:
File "C:\Users\Me\Anaconda3\lib\site-
packages\kivy\input\providers\wm_common.py", line 122, in _closure
oldAddr = func(hWnd, GWL_WNDPROC, cast(wndProc, c_void_p).value)
ArgumentError: argument 3: <class 'TypeError'>: wrong type
我是Anaconda的新手,我想知道这里出了什么问题。任何帮助将非常感激。
我使用
在管理员conda终端中重新安装了kivyconda install -c conda-forge kivy
我创建了一个虚拟应用程序,只有很少的部分来演示该问题。我在下面包含了此代码。
from kivy.app import App
from kivy.uix.widget import Widget
class FakeTool(Widget):
pass
class FakeApp(App):
def build(self):
return FakeTool()
if __name__ == '__main__':
FakeApp().run()
答案 0 :(得分:1)
遇到类似的问题,在这篇文章中找到了解决方法:
https://stackoverflow.com/a/55057636/9752709
在再次启动您的应用之前,请使用reset()函数。
if __name__ == '__main__':
FakeApp().run()
reset()
FakeApp().run()
...
答案 1 :(得分:1)
在Anaconda上使用kivy运行MyFirstApp时遇到此问题。
此问题已通过运行内核>重新启动并清除输出来解决
希望这会有所帮助。我很确定我们可以在重新执行命令run()之前编写一个命令(如reset())来执行上述任务。
答案 2 :(得分:0)
问题是Kivy使用的全局变量!! 您必须先清理并修复这些问题,然后才能重新启动kivy应用程序。
这可以在Windows kivy应用程序中完成,方法是定义一个reset()函数,该函数在运行应用程序之前进行清理并调用它。
下面的代码应该说明这一点。
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
def reset():
import kivy.core.window as window
from kivy.base import EventLoop
if not EventLoop.event_listeners:
from kivy.cache import Cache
window.Window = window.core_select_lib('window', window.window_impl, True)
Cache.print_usage()
for cat in Cache._categories:
Cache._objects[cat] = {}
class MyGrid(GridLayout):
def __init__(self, **kwargs):
super(MyGrid, self).__init__(**kwargs)
self.cols = 2
self.add_widget(Label(text="First Name: "))
self.firstName = TextInput(multiline=False)
self.add_widget(self.firstName)
class MyApp(App):
def build(self):
return MyGrid()
if __name__ == "__main__":
reset()
app = MyApp()
app.run()