python - 在python中再次出现多个复选框
问题描述
我是菜鸟,我正在尝试一次创建许多复选框。最终,我的程序将在同一目录中创建文件夹,具体取决于已检查的文件夹。我根本没有使用 IntVar()。我希望在默认情况下勾选某些框...根据我字典中的条目,我什至尝试将“变量”= 1 放入我的循环中并且这些框没有被勾选!!!
import os
from tkinter import *
def create_folders():
for item in list_of_folders:
print(item)
# os.mkdir(list_of_folders[item])
list_of_folders = {"Audio":0,"AVI":0, "Footage":1, "GFX":1, "MP4":1, "MOV":1, "MPG":0, "Photography":1, "Press":1}
num_row=0
window = Tk()
var=[]
window.title("Folder Creation v1.0")
window.minsize(300, 200)
window.config(padx=100, pady=100)
for item in list_of_folders:
num_row +=1
Checkbutton(window, text=item, variable=list_of_folders[item]).grid(row=num_row, sticky=W)
Label(window, text="").grid(column=0, row=10, sticky=W)
Button(window, text="Create Folders", command=create_folders).grid(column=0, row=15, sticky=W)
Button(window, text="Exit", command=window.destroy).grid(column=1, row=15, sticky=W)
window.mainloop()
解决方案
你离胜利太近了,我没有添加任何花哨的东西,我只是稍微优化了你的代码并使用IntVar(value=1)
检查按钮并将其变量存储IntVar()
到列表中,以便稍后在最终按钮单击时迭代以实际创建目录。
如屏幕截图所示,调用 get 方法IntVar()
返回复选框的当前状态。
import os
from tkinter import *
def create_folders():
for button in boxes:
if button["state"].get(): #check if its checked or not
print("Creating folder", button["text"])
os.mkdir(button["text"])
boxes = []
list_of_folders = {
"Audio": 0,
"AVI": 0,
"Footage": 1,
"GFX": 1,
"MP4": 0,
"MOV": 1,
"MPG": 0,
"Photography": 1,
"Press": 1
}
num_row=0
window = Tk()
window.title("Folder Creation v1.0")
window.minsize(300, 200)
window.config(padx=100, pady=100)
for item in list_of_folders.keys():
lookup = IntVar(value=list_of_folders[item])
Checkbutton(window, text = item, variable=lookup).grid(row=len(boxes) + 1, sticky=W)
boxes.append({
"text": item, #store name to create the directory
"state": lookup #store reference to check whether we need to create directory
})
Label(window, text="").grid(column=0, row=10, sticky=W)
Button(window, text="Create Folders", command=create_folders).grid(column=0, row=15, sticky=W)
Button(window, text="Exit", command=window.destroy).grid(column=1, row=15, sticky=W)
window.mainloop()
截屏
推荐阅读
- php - 如何使用 PHP 发送 HTTP 请求以使用 Jaxon 连接 PostgreSQL 数据库?
- mysql - Mysql 获取包含匹配另一个条件的所有数据
- r - 如何使用leaflet.esri 包添加ArcGIS 服务器层?
- kotlin - Kotlin:lambda 运行替代方案
- java - 如何强制 Spring Scheduled 并行执行单个方法?
- sql-server - 如何捕获诸如“包验证错误”之类的错误
- c# - 如何在 Simple Injector 中创建标记的 Litetime?
- xcode - 并行运行 xcode ui 测试时 Xcpretty 不起作用
- xml - 如何在最后一页创建页脚
- c# - 如何在 UWP 中更改列表框项目(文本块)的背景