首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Python中获得Joystick的输入?

如何从Python中获得Joystick的输入?
EN

Stack Overflow用户
提问于 2021-09-17 03:55:16
回答 1查看 3.6K关注 0票数 1

我试图从我有一个操纵杆输入(特别是Logitech极端3D专业)与一个Python程序。不幸的是,我不知道如何把这件事做好。

我目前有一个使用PyGame的工作原型,但我不想使用PyGame,因为我已经希望同时打开另一个Tkinter窗口。

我尝试过inputs库,但是每次插入操纵杆时我都会得到一个inputs.UnpluggedError

除了PyGame,还有其他获得操纵杆输入的方法吗?

我用的是MacBook航空公司的“大苏尔”。

工作代码:

代码语言:javascript
复制
import os
import pprint
import pygame
import threading

class PS4Controller(object):
    """Class representing the PS4 controller. Pretty straightforward functionality."""

    controller = None
    axis_data = None
    button_data = None
    hat_data = None

    def init(self):
        """Initialize the joystick components"""
        
        pygame.init()
        pygame.joystick.init()
        self.controller = pygame.joystick.Joystick(0)
        self.controller.init()

    def listen(self):
        """Listen for events to happen"""
        
        if not self.axis_data:
            self.axis_data = {}

        if not self.button_data:
            self.button_data = {}
            for i in range(self.controller.get_numbuttons()):
                self.button_data[i] = False

        if not self.hat_data:
            self.hat_data = {}
            for i in range(self.controller.get_numhats()):
                self.hat_data[i] = (0, 0)

        while True:
            for event in pygame.event.get():
                if event.type == pygame.JOYAXISMOTION:
                    self.axis_data[event.axis] = round(event.value,2)
                elif event.type == pygame.JOYBUTTONDOWN:
                    self.button_data[event.button] = True
                elif event.type == pygame.JOYBUTTONUP:
                    self.button_data[event.button] = False
                elif event.type == pygame.JOYHATMOTION:
                    self.hat_data[event.hat] = event.value

                # Insert your code on what you would like to happen for each event here!
                # In the current setup, I have the state simply printing out to the screen.
                
                os.system('clear')
                pprint.pprint(self.button_data)
                pprint.pprint(self.axis_data)
                pprint.pprint(self.hat_data)


def controller_main():
    ps4 = PS4Controller()
    ps4.init()
    ps4.listen()

controller_main()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-29 06:21:25

试试这个py-操纵杆模块:https://pypi.org/project/pyjoystick/希望它有帮助!

代码语言:javascript
复制
from pyjoystick.sdl2 import Key, Joystick, run_event_loop

def print_add(joy):
    print('Added', joy)

def print_remove(joy):
    print('Removed', joy)

def key_received(key):
    print('received', key)
    if key.value == Key.HAT_UP:
        #do something
    elif key.value == Key.HAT_DOWN:
        #do something
    if key.value == Key.HAT_LEFT:
        #do something
    elif key.value == Key.HAT_UPLEFT:
        #do something
    elif key.value == Key.HAT_DOWNLEFT:
        #do something
    elif key.value == Key.HAT_RIGHT:
        #do something
    elif key.value == Key.HAT_UPRIGHT:
        #do something
    elif key.value == Key.HAT_DOWNRIGHT:
        #do something

run_event_loop(print_add, print_remove, key_received)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69217574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档