for循环中的Tkinter复选框

时间:2018-11-13 16:58:18

标签: python for-loop checkbox tkinter

几天以来,我一直在尝试学习python和tkinter。 我想在框架中创建动态复选框(文件中的值)。

这是我的代码:

import tkinter as tk
lst="lst.txt"

class DisplayApp:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("My Menu")
        self.build_gui()

    def build_gui(self):
        frame_1 = tk.LabelFrame(self.root, text="Frame 1")
        frame_1.grid(row=2, columnspan=3, sticky='WE',
                            padx=5, pady=5, ipadx=5, ipady=5)
        linestring = open(lst, 'r').read()
        for checkBoxName in linestring:
                c = tk.Checkbutton(frame_1, text=checkBoxName,)
                c.pack(side=tk.LEFT)

    def clicked(self):
        pass

    def main(self):
        self.root.mainloop()

if __name__ == "__main__":
        app = DisplayApp()
        app.main()

这是文件lst.txt:

laptopname_1
laptopname_2
laptopname_3
laptopname_n
...

此错误:

[root@hdid_master ~]# ./test_menu_2.py
  File "./test_menu_2.py", line 35
    for checkBoxName in linestring:
                                  ^
TabError: inconsistent use of tabs and spaces in indentation

非常感谢您的帮助。 最好的问候。

1 个答案:

答案 0 :(得分:0)

您的代码错误告诉您您正在混用tabspace,这是您不应该做的。 Python依靠一致的缩进来知道一行代码的结尾和另一行的起点。请确保遵循PEP8准则,并且每个缩进级别使用4个空格。

话虽如此,您还需要对按钮的创建进行一些更改。现在,它将为每行的每个字母创建一个不同的按钮。

请参见下面的更正示例,如果您有任何疑问,请告诉我

import tkinter as tk
lst="lst.txt"

class DisplayApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("My Menu")
        frame_1 = tk.LabelFrame(self, text="Frame 1")
        frame_1.grid(row=2, columnspan=3, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5)

        with open(lst, 'r') as lst_file:
            for item in lst_file:
                tk.Checkbutton(frame_1, text=item.rstrip()).pack(side=tk.LEFT)


if __name__ == "__main__":
    DisplayApp().mainloop()