Python 3.x 尝试初始化所有可用的操纵手柄,并将其名称放入列表中

Python 3.x 尝试初始化所有可用的操纵手柄,并将其名称放入列表中,python-3.x,pygame,Python 3.x,Pygame,我一直在尝试制作一个程序,对所有操纵手柄进行初始化,并将其名称放入列表中。它给出了以下错误: joysticks[x].init() IndexError: list index out of range 我认为这是不可能的,因为当没有更多的操纵杆时,for循环停止。 有人能发现问题吗? 提前感谢,, 成人 import pygame,sys #pygame.display.set_mode((1, 1)) from tkinter import * window = Tk() window

我一直在尝试制作一个程序,对所有操纵手柄进行初始化,并将其名称放入列表中。它给出了以下错误:

joysticks[x].init()
IndexError: list index out of range
我认为这是不可能的,因为当没有更多的操纵杆时,for循环停止。 有人能发现问题吗? 提前感谢,, 成人

import pygame,sys
#pygame.display.set_mode((1, 1))
from tkinter import *

window = Tk()
window.title("Ets2 Button Admin")
window.geometry('500x300')

pygame.joystick.init()
pygame.display.init()
#Initialises pygame
j_name =[]
def controlcheck():
    count = pygame.joystick.get_count()
    if count == 0:
        lbl = Label(window, text="There is no controller connected to the PC, please connect a controller")
        lbl.grid(column=0, row=0)

    elif count > 0:
        lbl = Label(window, text="Connected controllers:")
        lbl.grid(column=0, row=0)
        for x in range(count):
            joysticks = [pygame.joystick.Joystick(x)]
            joysticks[x].init()
            j_name = [joysticks[x].get_name()]
        lbl = Label(window, text=f"{j_name}")
        lbl.grid(column=0, row=1)
    window.after(500,controlcheck)
controlcheck()
window.mainloop()

问题是代码在列表中包含操纵杆,但每次使用单个元素重新创建列表时。所以当
x
为零时,就可以了。但是在第二次迭代中,
操纵杆仍然只是一个包含1个元素的列表,但是代码请求第二个元素(因为
x
==1)

我猜你想创建一个操纵杆列表:

    joysticks = []
    for i in range( count ):
        joysticks.append( pygame.joystick.Joystick( i ) )
        joysticks[i].init()
您还可以使用
操纵杆[-1].init()
始终获取最后一个元素,但这不会突出显示此错误


样式说明:通常惯例是使用变量
i
作为简单循环迭代器。(对于嵌套循环,有时也是
j
k
)。这有点重要,因为其他软件引擎能够更快地读取代码,因为它符合大多数人编写代码的方式。任何人都可以更快地理解他们的代码。但归根结底,这是你的代码,所以你可以随意编写。

问题是代码在列表中有操纵杆,但每次列表都是用单个元素重新创建的。所以当
x
为零时,就可以了。但是在第二次迭代中,
操纵杆仍然只是一个包含1个元素的列表,但是代码请求第二个元素(因为
x
==1)

我猜你想创建一个操纵杆列表:

    joysticks = []
    for i in range( count ):
        joysticks.append( pygame.joystick.Joystick( i ) )
        joysticks[i].init()
您还可以使用
操纵杆[-1].init()
始终获取最后一个元素,但这不会突出显示此错误


样式说明:通常惯例是使用变量
i
作为简单循环迭代器。(对于嵌套循环,有时也是
j
k
)。这有点重要,因为其他软件引擎能够更快地读取代码,因为它符合大多数人编写代码的方式。任何人都可以更快地理解他们的代码。但归根结底,这是您的代码,所以请按照您的喜好编写。

感谢您的回复和解释。至于i/x的使用,由于数学课的原因,我默认为x,你说得很对。不过,您的解决方案只能部分起作用,因为现在,当我在标签中打印j_名称时,它只显示一个操纵杆,而当我拔下其中一个操纵杆时,我可以分别检测这两个操纵杆。编辑:当我对j_名称使用相同的技术时(因此j_name.append(操纵杆[I].get_name()),效果很好。感谢您的回复和解释。至于i/x的使用,由于数学课的原因,我默认为x,你说得很对。不过,您的解决方案只能部分起作用,因为现在,当我在标签中打印j_name时,它只显示一个操纵杆,而当我拔下其中一个操纵杆时,我可以分别检测这两个操纵杆。编辑:当我对j_name使用相同的技术时(因此j_name.append(操纵杆[I].get_name()),它工作正常。