Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为“取消”按钮创建一个功能,当单击该按钮时,取消选中我已选中的所有按钮?_Python_Loops_Tkinter - Fatal编程技术网

Python 如何为“取消”按钮创建一个功能,当单击该按钮时,取消选中我已选中的所有按钮?

Python 如何为“取消”按钮创建一个功能,当单击该按钮时,取消选中我已选中的所有按钮?,python,loops,tkinter,Python,Loops,Tkinter,我制作了一个菜单,它由复选按钮组成,这些按钮是通过向列表中添加值创建的,因此,准确地说,如果我想在菜单上添加新项目,我需要做的就是在列表中添加一些内容,然后通过while循环创建复选按钮。我在这里遇到了一个问题,我想做一个取消按钮,取消选中所有选中的按钮,但由于checkbutton中的变量选项对于所有按钮都是相同的,因为只有一个while循环用于创建它们。当我按下一个按钮时,所有按钮都被选中 注意:我不想使用deselect()选项,我正试图这样做。我得到的典型错误是: Ponisti[p]=

我制作了一个菜单,它由复选按钮组成,这些按钮是通过向列表中添加值创建的,因此,准确地说,如果我想在菜单上添加新项目,我需要做的就是在列表中添加一些内容,然后通过while循环创建复选按钮。我在这里遇到了一个问题,我想做一个取消按钮,取消选中所有选中的按钮,但由于checkbutton中的变量选项对于所有按钮都是相同的,因为只有一个while循环用于创建它们。当我按下一个按钮时,所有按钮都被选中

注意:我不想使用
deselect()
选项,我正试图这样做。我得到的典型错误是:

Ponisti[p]=tkinter.IntVar()
索引器:列表分配索引超出范围

或者,当我按下一个按钮时,它会选择全部。 总而言之,我正在尝试为我添加的每个新按钮更改checkbutton中的变量,以便我可以独立地选择它们

我的一段代码是作为一个例子给出的,我希望你能理解它,理解我的想法

一段代码:

导入tkinter
window=tkinter.Tk()
数组=[]
p=0
Ponisti=[]
而p!=莱恩(梅尼):
Ponisti[p]=tkinter.IntVar()
p=p+1
def cancel():
f=0
对于数组中的i:
Ponisti[f]。集合('0')
f=f+1
而j!=莱恩(梅尼):
items=tkinter.Checkbutton(窗口,文本=Meni[j],onvalue=1,offvalue=0)
canceldugme=tkinter.Button(frame1,text=“Cancel”,command=Cancel)

这就是你想要的

将tkinter作为tk导入
def reset():
对于变量中的var:
变量集(0)
菜单=[str(i)表示范围(8)内的i]
root=tk.tk()
frame=tk.frame(根)
frame.pack()
变量=[tk.IntVar(0)表示范围内的uu(len(menu))]
长度=长度(菜单)//2
对于i,枚举中的var(变量):
行,列=divmod(i,长度)
checkbutton=tk.checkbutton(框架,变量=var,文本=menu[i])
checkbutton.grid(行=行,列=列,sticky=“w”)
重置按钮=tk.按钮(根,text=“reset”,command=reset)
重置按钮包(侧=“右”)
root.mainloop()
基本上,您希望创建一个变量列表,并为每个变量创建一个绑定到它的新按钮。调用
reset
函数时,只需迭代变量并重置其值


我将复选按钮放在一个框架中,这样您就可以使用
grid
方法,因为它看起来您希望以网格的方式对它们进行布局。使用框架的原因是不能将
grid
pack
用于同一窗口。使用
pack()
放置
frame
reset_按钮
,然后可以使用
grid()
放置框架内的复选框

为什么不使用
for
循环而不是
while
循环?你的代码中还有很多未定义的变量。我不能使用它,因为菜单由整数和字符串组成,基本上,它是两个列表,一个是食品名称,另一个是价格,当我连接它们时,我将它们设置为while循环中的复选按钮。现在我想创建一个取消按钮,取消选择所选项目,但该按钮只有一个变量选项,当我放置取消函数时,该函数有IntVar()和set('0'),在该变量选项中,当我单击其中一个时,我的所有项目都被选中。您可以将第一个
while
循环替换为
范围内的p(len(Meni))
,第二个替换为
范围内的j(len(Meni))
现在我可以将Ponisti list作为变量放入checkbutton?因为我正在尝试设置这些变量,并在我的cancel按钮中添加一个cancel函数作为命令。让我弄清楚,您想创建一组checkbutton,它们都绑定到它们自己的变量,当您按下按钮时,您希望通过重置变量而不是使用
取消选择
方法来取消选中它们。对吗?很好用!