几天以来,我一直在尝试学习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
非常感谢您的帮助。 最好的问候。
答案 0 :(得分:0)
您的代码错误告诉您您正在混用tab
和space
,这是您不应该做的。 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()