我对Python非常陌生,我现在正在创建自己的项目,因为我相信这是更快学习的唯一方法。我正在从事一个应该使用 5 个公式来计算输出的项目。为此,我创建了一个列表,其中包含公式中应使用的数字,一旦用户通过单选按钮选择值,另一个空列表就会更新。问题是,当我按下计算按钮运行计算方法时,它触发了错误:列表索引超出范围。我不知道为什么,但我已经尝试解决它很多次了,而且我正在学习更多有关类、方法和属性的知识。部分代码如下:
import tkinter as tk
import customtkinter as ctk
from PIL import Image, ImageTk
CONSTANT_1 = 10 # Constant value when iCruise is 4 in size
CONSTANT_2 = 240 # Constant value when iCruise is 4 in size and X model
CONSTANT_3 = 280 # Constant value when iCruise is 6 in size and x model, also iCruise 6 with different steering head
CONSTANT_4 = 55 # Constant value when iCruise is 6 / 8 / 9 standard
class App:
def __init__(self, master: ctk.CTk):
self.master = master
self.master.geometry("490x520")
self.master.resizable(False, False)
self.master.wm_title("iCruise TF Offset App")
# variable number
self.list = [CONSTANT_1, CONSTANT_2, CONSTANT_3, CONSTANT_4]
self.list2 = []
............
def selection(self):
if self.radio_var1.get() == 1 and self.radio_var3.get() == 1:
# Condition to use iCruise 4 3/4" - Standard
self.list2 = self.list.append(CONSTANT_1)
elif self.radio_var1.get() == 1 and self.radio_var3.get() == 2:
# Condition to use iCruise 4 3/4" - X
self.list2 = self.list.append(CONSTANT_2)
elif (
self.radio_var1.get() == 2
and self.radio_var2.get() == 2
and self.radio_var3.get() == 1
):
# Condition to use iCruise 6 3/4" - Steering Head M2M
self.list2 = self.list.append(CONSTANT_3)
elif (
self.radio_var1.get() == 1
and self.radio_var2.get() == 2
and self.radio_var3.get() == 1
):
# Condition to use iCruise 6 3/4" - Steering Head TVR
self.list2 = self.list.append(CONSTANT_3)
elif (
self.radio_var1.get() == 1
and self.radio_var2.get() == 1
and self.radio_var3.get() == 1
def calculate(self):
try:
a = float(self.gtf_entry.get())
b = float(self.cd_entry.get())
c = self.list2[0]
tool_face = round((c - a + b), 2)
if tool_face < 0:
tool_face += 360
print(tool_face)
else:
print(tool_face)
我尝试使用追加方法来更新我的新列表,但它显示错误:列表索引超出范围。
代码中的问题与您如何使用
append
方法和 self.list2
属性有关。 append
方法就地修改列表并返回 None
。因此,当您执行 self.list2 = self.list.append(CONSTANT_1)
时,self.list2
会变为 None
,从而在您尝试访问 List index out of range
时导致 calculate
方法中出现 self.list2[0]
错误。
要解决此问题,您应该使用
self.list.append(CONSTANT_1)
,而不将其分配给 self.list2
。另外,请确保相应地更新代码中使用 self.list2
的其他部分。
这是修改后的
selection
方法:
def selection(self):
if self.radio_var1.get() == 1 and self.radio_var3.get() == 1:
# Condition to use iCruise 4 3/4" - Standard
self.list.append(CONSTANT_1)
elif self.radio_var1.get() == 1 and self.radio_var3.get() == 2:
# Condition to use iCruise 4 3/4" - X
self.list.append(CONSTANT_2)
elif (
self.radio_var1.get() == 2
and self.radio_var2.get() == 2
and self.radio_var3.get() == 1
):
# Condition to use iCruise 6 3/4" - Steering Head M2M
self.list.append(CONSTANT_3)
elif (
self.radio_var1.get() == 1
and self.radio_var2.get() == 2
and self.radio_var3.get() == 1
):
# Condition to use iCruise 6 3/4" - Steering Head TVR
self.list.append(CONSTANT_3)
elif (
self.radio_var1.get() == 1
and self.radio_var2.get() == 1
and self.radio_var3.get() == 1
):
# Add more conditions if needed
pass
我从网络上的各种来源获取此信息,主要来自 CTk Docs