在列表框中显示数组

时间:2016-05-09 15:23:17

标签: python arrays python-3.x tkinter listbox

谁能告诉我我做错了什么?!我在Python 3中使用tkinter创建了一个GUI。我打算创建数组并在窗口打开时将其显示到列表框。下面,您可以看到我使用过的代码。

错误

Population.X[i] = float(random.random()) * self.XMin
IndexError: list assignment index out of range

CODE:

class Population:
    X = []
    Y = []

class Application(Frame):
   def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.widgets()
        self.create_array()

   def widgets(self):
        self.first_listbox = Listbox(self)
        self.first_listbox.grid()

   def create_array(self):
        i = 0
        while i < 20:
            Population.X[i] = float(random.random()) * self.XMin
            # x = random.random() - Random float x | 0.0 <= x < 1.0 |
            if Population.X[i] == 0:
                Population.X[i] = -0.1
            Population.Y[i] = 1 / Population.X[i]
            i += 1
        while i < 20:
            self.first_listbox.insert(i, Population.X[i])
            i += 1

root = Tk()
root.geometry("600x400")
app = Application(root)
root.mainloop()

1 个答案:

答案 0 :(得分:2)

附加到列表

您收到IndexError,因为您在列表中没有元素时尝试访问元素编号0

您无法像这样创建新索引:

my_list = []
my_list[12] = 'whatever'

但是你可以迭代地附加到列表中:

def create_array(self):

    for i in range(20):

        new_item = float(random.random()) * self.XMin)

        if new_item == 0:
            new_item = -0.1

        Population.X.append(new_item)
        Population.Y.append(1 / new_item)

填写列表框

此外,您的代码的这部分将永远无法访问:

    while i < 20:
        self.first_listbox.insert(i, Population.X[i])
        i += 1

因为i离开前一个循环时为20。您需要将i设置回0或更好以重新考虑整个事情:

for item in Population.X:
    self.first_listbox.insert(END, item)

次要样式评论

请注意

        new_item = float(random.random()) * self.XMin)

        if new_item == 0:
            new_item = -0.1

可以写成一行:

        new_item = float(random.random()) * self.XMin) or -0.1

但前者完全正常且易于掌握。这主要是品味问题。