Python 使用Kivy调用pygame操纵杆数据采集
好的,我一直在尝试调用一个函数,该函数使用pygame.goodge从2个Logitech 3d extreme pro操纵杆获取输入。当我严格使用pygame时,操纵杆被识别并工作。但是当我试图在kv语言中调用类似的函数时,我得到了这个错误Python 使用Kivy调用pygame操纵杆数据采集,python,python-3.x,pygame,kivy,Python,Python 3.x,Pygame,Kivy,好的,我一直在尝试调用一个函数,该函数使用pygame.goodge从2个Logitech 3d extreme pro操纵杆获取输入。当我严格使用pygame时,操纵杆被识别并工作。但是当我试图在kv语言中调用类似的函数时,我得到了这个错误 File "MainUI__1-2.py", line 179, in <module> MainClass().run() File "/home/mlees/kivy_venv/lib/p
File "MainUI__1-2.py", line 179, in <module>
MainClass().run()
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/app.py", line 829, in run
root = self.build()
File "MainUI__1-2.py", line 175, in build
return tabpanelkv()
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/uix/tabbedpanel.py", line 482, in __init__
super(TabbedPanel, self).__init__(**kwargs)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/uix/gridlayout.py", line 256, in __init__
super(GridLayout, self).__init__(**kwargs)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/uix/layout.py", line 76, in __init__
super(Layout, self).__init__(**kwargs)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/uix/widget.py", line 361, in __init__
rule_children=rule_children)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/uix/widget.py", line 469, in apply_class_lang_rules
rule_children=rule_children)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/lang/builder.py", line 538, in apply
rule_children=rule_children)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/lang/builder.py", line 659, in _apply_rule
child, crule, rootrule, rule_children=rule_children)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/lang/builder.py", line 659, in _apply_rule
child, crule, rootrule, rule_children=rule_children)
File "/home/mlees/kivy_venv/lib/python3.6/site-packages/kivy/lang/builder.py", line 654, in _apply_rule
child = cls(__no_builder=True)
File "MainUI__1-2.py", line 129, in __init__
self.Joy1B = pygame.joystick.Joystick(self.joy1A)
TypeError: an integer is required (got type NoneType)
任何帮助都是非常感谢的。问题是
\uuuu init\uuuu
是在Kivy
执行kv
之前执行的
class JoystickValue(GridLayout):
joy1A = ObjectProperty()
joy2A = ObjectProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
#print('self.joy1A:', self.joy1A)
Clock.schedule_once(self.set_joys, 0.1)
def set_joys(self, arg):
#print('self.joy1A:', self.joy1A)
self.Joy1B = pygame.joystick.Joystick(self.joy1A)
self.Joy2B = pygame.joystick.Joystick(self.joy2A)
# ... rest ...
您可以直接在代码中设置值
class JoystickValue(GridLayout):
joy1A = ObjectProperty(0)
joy2A = ObjectProperty(1)
或者您必须使用scheduler
稍后运行此代码,Kivy
将有时间执行kv
class JoystickValue(GridLayout):
joy1A = ObjectProperty()
joy2A = ObjectProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
#print('self.joy1A:', self.joy1A)
Clock.schedule_once(self.set_joys, 0.1)
def set_joys(self, arg):
#print('self.joy1A:', self.joy1A)
self.Joy1B = pygame.joystick.Joystick(self.joy1A)
self.Joy2B = pygame.joystick.Joystick(self.joy2A)
# ... rest ...
codeprint(self.joy1A)
为我提供了None
-最好直接使用数字操纵杆(0)
或在Python中定义self.joy1A=0
或joy1A=ObjectProperty(defaultvalue=0)
。来自kv
的代码可以在之后执行
class JoystickValue(GridLayout):
joy1A = ObjectProperty()
joy2A = ObjectProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
#print('self.joy1A:', self.joy1A)
Clock.schedule_once(self.set_joys, 0.1)
def set_joys(self, arg):
#print('self.joy1A:', self.joy1A)
self.Joy1B = pygame.joystick.Joystick(self.joy1A)
self.Joy2B = pygame.joystick.Joystick(self.joy2A)
# ... rest ...