Python Tkinter:从位置读取文件,为每个文件创建检查按钮

时间:2014-07-12 15:46:16

标签: python tkinter

我正在尝试从我电脑上的文件夹位置读取文本文件。然后为每个文件创建检查按钮。选中复选按钮后,我想按“提交”按钮。打印在控制台窗口中选择的每个文件。

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()

运行此代码后,结果是当选中任何复选按钮并选择提交按钮时,仅打印文件夹中的最后一个文本文件。这对我来说是有意义的,因为文件被保存为最后读入的文件。但是,我无法想出存储每个文件名的方法。除非我将文件读入数组,我不知道该怎么做。 任何帮助非常感谢!

2 个答案:

答案 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作为样式,以更易读(适用于所有人)的文件结束。