Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Kivy调用pygame操纵杆数据采集_Python_Python 3.x_Pygame_Kivy - Fatal编程技术网

Python 使用Kivy调用pygame操纵杆数据采集

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

好的,我一直在尝试调用一个函数,该函数使用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/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 ...
code
print(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 ...