【问题标题】:Tkinter checkbox in a for loopfor循环中的Tkinter复选框
【发布时间】:2018-11-14 01:07:52
【问题描述】:

几天以来,我一直在尝试学习 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

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

【问题讨论】:

  • 您的错误消息告诉您重要信息,阅读和理解它对于帮助您排除代码故障至关重要。在这种特殊情况下,python 解释器告诉您不要将制表符和空格混合在一起作为缩进。使用缩进中的所有制表符或所有空格,而不是两者的混合。
  • 您的错误表明缩进中制表符和空格的使用不一致。这意味着您将制表符与空格混合在一起。即使纠正了制表符和缩进,我认为您还需要修复检查按钮的创建。

标签: python for-loop checkbox tkinter


【解决方案1】:

您的代码错误告诉您,您不应该混合使用 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()

【讨论】:

  • 非常感谢迈克。但是现在,如何按列拆分列表?我的文件可能包含 100 次迭代
  • @Indi59 这是另一个帖子的问题。每个问题都应该针对 Stack Overflow 帖子的一个问题。先自己尝试一下,如果遇到困难,请在此处提问。
猜你喜欢
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 2020-11-22
  • 2021-11-22
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
相关资源
最近更新 更多