我是新手使用Tkinter
。我想从循环创建多个复选框。我参考Tkinter checkboxes created in loop但我不理解它。
我想将所有文件显示为位于目录中的复选框。
帮帮我并告诉我需要改变什么?
代码:
from tkinter import filedialog,Checkbutton
import tkinter,os
window = tkinter.Tk()
def browse():
filez = filedialog.askdirectory(parent=window,title='Choose a file')#I choose a directory
ent1.insert(20,filez)#insert the path of directory to text box
dirs = os.listdir(filez)#gives all files of direcory
for file in dirs:
print(file)#Getting all files
var = tkinter.IntVar()
c = tkinter.Checkbutton(window,text=file,variable=var)#Create files to checkox
c.place(x=0,y=100)
window.title("First Gui")
window.geometry("400x400")
window.wm_iconbitmap("path of icon")
lbl = tkinter.Label(window,text="path")
lbl.place(x=0,y=60)
ent1 = tkinter.Entry(window)
ent1.place(x=80,y=60)
btn1 = tkinter.Button(window,text="Set Path",command=browse)
btn1.place(x=210,y=57)
window.mainloop()
点击按钮设置路径后,我想使用浏览功能
显示目录的所有文件作为复选框答案 0 :(得分:1)
我看到三个问题
您对所有c.place(x=0,y=100)
使用Checkbuttons
,因此您只能看到最后一个 - 其他隐藏在最后一个后面。
每个Checkbutton
都需要拥有IntVar
,您可以将其保留在列表或字典中。
当您选择新路径时,您必须删除之前的Checkbuttons
,因此您必须在列表或字典中记住它们。
示例显示了如何使用pack()
代替place()
来轻松放置所有Checkbuttons
。它还展示了如何使用字典保留IntVars
并检查选择了哪个,以及如何使用列表保留Checkbuttons
并稍后从窗口中删除它们。
import tkinter
import tkinter.filedialog
import os
# --- functions ---
def browse():
filez = tkinter.filedialog.askdirectory(parent=window, title='Choose a file')
ent1.insert(20, filez)
dirs = os.listdir(filez)
# remove previous IntVars
intvar_dict.clear()
# remove previous Checkboxes
for cb in checkbutton_list:
cb.destroy()
checkbutton_list.clear()
for filename in dirs:
# create IntVar for filename and keep in dictionary
intvar_dict[filename] = tkinter.IntVar()
# create Checkbutton for filename and keep on list
c = tkinter.Checkbutton(window, text=filename, variable=intvar_dict[filename])
c.pack()
checkbutton_list.append(c)
def test():
for key, value in intvar_dict.items():
if value.get() > 0:
print('selected:', key)
# --- main ---
# to keep all IntVars for all filenames
intvar_dict = {}
# to keep all Checkbuttons for all filenames
checkbutton_list = []
window = tkinter.Tk()
lbl = tkinter.Label(window, text="Path")
lbl.pack()
ent1 = tkinter.Entry(window)
ent1.pack()
btn1 = tkinter.Button(window, text="Select Path", command=browse)
btn1.pack()
btn1 = tkinter.Button(window, text="Test Checkboxes", command=test)
btn1.pack()
window.mainloop()