Флажок Ткинтера в цикле for - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь изучать 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 голосов
/ 13 ноября 2018

Ваш код ошибки говорит вам, что вы смешиваете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...