我可以使用tk.Checkbutton将变量添加到元组吗?

时间:2019-02-06 22:18:36

标签: python python-3.x tkinter

我有一个Python脚本,用于按扩展名删除文件(即删除所有以.com.html等结尾的文件)。目前,我有一个元组,用户必须注释掉或删除他或她希望不删除的文件。例如,如果他们想保留.com个文件,则必须从我的脚本中将其注释掉。我想用tkinter创建一个GUI,允许用户检查他们希望删除的扩展名。

我的目标是将检查的变量放入一个元组中,在这里我可以使用.endswith()命令os.remove()以该元组中列出的扩展名结尾的文件。

没有GUI,这很容易,因为我只用一系列str字符串定义了元组。我可以说:

Files_to_Delete = (".com", ".html")

但是尝试使用tk.Checkbutton()时,出现错误:

endswith的元组只能包含str,不能包含StringVar

我认为我对如何解决该问题颇有想法。我的按钮定义如下:

V1 = tk.StringVar()
c1=tk.Checkbutton(root, text=".com", variable=V1, onvalue=".com")

1 个答案:

答案 0 :(得分:1)

如果您要查找值设置为

tkinter变量,必须调用其.get()方法。这是一个您可以弄乱的示例。我更喜欢使用OOP制作GUI,希望不要让您感到困惑

import tkinter as tk


class OOP:
    def __init__(self):
        self.win = tk.Tk()
        self.com = tk.StringVar()
        self.create_widgets()

    def print_value(self):
        print(self.com)
        print(self.com.get())

    def create_widgets(self):
        tk.Checkbutton(self.win, text=".com", variable=self.com, onvalue=".com").pack()
        tk.Button(self.win, text="Print value", command=self.print_value).pack()


app = OOP()
app.win.mainloop()

如果您想将变量初始化为某个值,或者在执行过程中完全更改其值,也可以调用V1.set(".com")(在我的示例中为self.com.set())!此示例表明,如果省略.get(),则会得到一些奇怪的输出,例如“ PY_VAR0”,而不是复选按钮的实际值