错误:列表索引超出范围 - CustomTkinter App

问题描述 投票:0回答:1

我对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)

我尝试使用追加方法来更新我的新列表,但它显示错误:列表索引超出范围。

python list methods customtkinter
1个回答
0
投票

问题说明

代码中的问题与您如何使用

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

© www.soinside.com 2019 - 2024. All rights reserved.