python-3.x - 尝试初始化所有可用的操纵杆并将它们的名称放在列表中
问题描述
我一直在尝试制作一个程序来初始化所有可用的操纵杆并将它们的名称放在一个列表中。它给出了以下错误:
joysticks[x].init()
IndexError: list index out of range
我认为这是不可能的,因为当没有更多的操纵杆时 for 循环会停止。有人能发现问题吗?提前致谢, Adutchman
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
为零时,就可以了。但是在第二次迭代中,joysticks
仍然只是一个包含 1 个元素的列表,但是代码请求了第二个元素(因为x
== 1)。
for x in range(count):
joysticks = [pygame.joystick.Joystick(x)]
joysticks[x].init()
我猜你的意思是创建一个操纵杆列表:
joysticks = []
for i in range( count ):
joysticks.append( pygame.joystick.Joystick( i ) )
joysticks[i].init()
您也可以使用joysticks[-1].init()
总是获取最后一个元素,但这不会突出显示此错误。
样式说明:通常约定是将变量i
用于简单的循环迭代器。(有时j
也k
适用于嵌套循环)。这有点重要,因为其他软件引擎将能够更快地读取代码,因为它符合大多数人编写代码的方式。任何你都将能够更快地理解他们的代码。但归根结底,这是你的代码,所以你可以随心所欲地编写它。
推荐阅读
- ios - Web RTC setLocalDescription 在 iOS 14 上总是失败
- css-position - 尽管 z-index 两个组件呈现在同一级别
- java - 如何解决 dagger 错误 - 如果没有 @Inject 构造函数或 @Provides-annotated 方法,则无法提供字符串
- python - 尝试爬行,但只有一个有效,其他无效
- linux - 同一进程的不同PID
- html - 移动设备上三倍于正常高度的图像
- google-sheets - 在谷歌表格中按共享符号查找部门
- vue.js - 我该如何解决这种跳跃过渡?
- swiftui - 检查 ForEach 奇/偶行
- android - 为什么我无法转换我的服务器响应并出现错误?