【发布时间】:2021-10-31 19:38:11
【问题描述】:
当我运行此代码时,我在标题中收到这样的错误。我想制作 TODO 列表,但我在路上遇到了很多错误:(。我无法在其他函数中调用数组(tab),也无法更改复选框grid 中的列。
from tkinter import *
from tkinter import messagebox as msb
win = Tk()
win.title("Checkbutton")
win.geometry("300x600")
win.resizable("False","False")
task_name = StringVar()
tab = []
tab.append("")
tab.append("")
r = 2
c = 1
cc = IntVar
def checking():
tab[r].grid(row=r, column=1, padx=(10, 10), pady=(5, 5))
def addcheck():
global r
global c
global cc
if r < 16:
tab.append(Checkbutton(variable = cc, text = task_name.get(), command = checking))
tab[r].grid(row=r, column=0, padx=(10, 10), pady=(5, 5))
r = r + 1
task_entry.delete(0, 20)
else:
msb.showwarning(title="DANGER", message="TOO MUCH TASKS, TAKE A REST")
text1 = Label(win, text = "TO DO:").grid(row = 1, column = 0, padx = (10, 10), pady = (30, 10))
text2 = Label(win, text = "DONE: ").grid(row = 1, column = 1, padx = (10, 10), pady = (30, 10))
task_entry = Entry(width = "20", textvariable = task_name)
task_entry.grid(row = 0, column = 0, padx = (30, 10))
add = Button(win, text = "add task", command = addcheck).grid(row = 0, column = 1, padx = (10, 10))
mainloop()
完全错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\matib\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
return self.func(*args)
File "D:\pythonprojekty\pythonProject\main.py", line 18, in checking
tab[r].grid(row=r, column=1, padx=(10, 10), pady=(5, 5))
IndexError: list index out of range
【问题讨论】:
-
错误是什么(提供从单词“Traceback”开始的完整错误回溯),正如我已经提到的模式
var = Widget(...).<layout_manager>(...)是一个错误的模式 -
添加到您的问题(您可以edit 它)而不是在 cmets 中,否则它们不会被格式化(并且在将该信息放入问题后删除评论)并且您不明白我在说什么模式,为什么还要在该列表中附加两个空字符串?
r也在发生变化,所以使用tab[r]无论如何都会给你该列表中的最后一项 -
我添加了两个空字符串,因为我想从网格中的第三行开始
-
我只想将选中的复选框中的列从 0 更改为 1
-
只需使用
Frames,那么您将能够从框架中的第 0 行开始,您的索引也是一个元素到高,例如,如果一个列表包含 2 个元素来访问第二个元素你需要使用[1]
标签: python python-3.x tkinter