我正在尝试从我电脑上的文件夹位置读取文本文件。然后为每个文件创建检查按钮。选中复选按钮后,我想按“提交”按钮。打印在控制台窗口中选择的每个文件。
from Tkinter import *
#Tk()
import os
root = Tk()
v = StringVar()
v.set("null") # initializing the choice, i.e. Python
def ShowChoice():
state = v
if state != 0:
print(file)
for file in os.listdir("Path"):
if file.endswith(".txt"):
aCheckButton = Checkbutton(root, text=file, variable= file)
aCheckButton.pack(anchor =W)
v = file
print (v)
submitButton = Button(root, text="Submit", command=ShowChoice)
submitButton.pack()
mainloop()
运行此代码后,结果是当选中任何复选按钮并选择提交按钮时,仅打印文件夹中的最后一个文本文件。这对我来说是有意义的,因为文件被保存为最后读入的文件。但是,我无法想出存储每个文件名的方法。除非我将文件读入数组,我不知道该怎么做。 任何帮助非常感谢!
答案 0 :(得分:0)
除非我将文件读入数组
不,您不想一次阅读所有这些文件。这将极大地影响性能。
但是如果你制作一个检查按钮及其相关变量的列表会很好。这样,您就可以在函数ShowChoice
内轻松访问它们。
以下是采用此提示的程序版本。我评论了我改变的大部分内容:
from Tkinter import *
import os
root = Tk()
# A list to hold the checkbuttons and their associated variables
buttons = []
def ShowChoice():
# Go through the list of checkbuttons and get each button/variable pair
for button, var in buttons:
# If var.get() is True, the checkbutton was clicked
if var.get():
# So, we open the file with a context manager
with open(os.path.join("Path", button["text"])) as file:
# And print its contents
print file.read()
for file in os.listdir("Path"):
if file.endswith(".txt"):
# Create a variable for the following checkbutton
var = IntVar()
# Create the checkbutton
button = Checkbutton(root, text=file, variable=var)
button.pack(anchor=W)
# Add a tuple of (button, var) to the list buttons
buttons.append((button, var))
submitButton = Button(root, text="Submit", command=ShowChoice)
submitButton.pack()
mainloop()
答案 1 :(得分:0)
根据the checkbutton doc,您必须将IntVar绑定到按钮,以查询其状态。
因此,在构建按钮时,给它们一个IntVar,作弊并将文件名附加到IntVar,以便稍后获取:
checked = IntVar()
checked.attached_file = file
aCheckButton = Checkbutton(root, text=file, variable=checked)
aCheckButton.pack(anchor=W)
buttons.append(checked)
您的ShowChoice现在看起来像:
def ShowChoice():
print [button.attached_file for button in buttons if button.get()]
如果选中该按钮,则打印每个按钮的附件(button.attached_file)(如果选中,则button.get()为1)。
别忘了宣布" buttons = []"在所有这些之前。
您还可以阅读并采用PEP8作为样式,以更易读(适用于所有人)的文件结束。