Перебор списка и вывод его через create_text - PullRequest
0 голосов
/ 04 мая 2018

У меня проблемы с созданием tkinter create_text. Я пытаюсь перебрать список и создать create_text выводить каждый элемент в списке один за другим. Я не могу понять это, так как каждый раз, когда я пытался, это не работает так, как я хочу. Вот некоторый код, который иллюстрирует проблему:

class GUI(Frame):
    def __init__(self, master):
        self.test_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        self.c = Canvas(master, width=300, height=300)
        self.c.pack()

    for items in self.test_list:
        items = items

    for i in range(0, 300, 100):
        for j in range(0, 300, 100):
            self.c.create_text(j + 25, i + 20, text=items)

root = Tk()
root.title("Test")
root.geometry("300x300")
GUI(root)
mainloop()

Спасибо, и я ценю помощь.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Это имеет две внешние петли.

# iterates, items == 9 now
for items in self.test_list:
    items = items


# uses 9 over and over
for i in range(0, 300, 100):
    for j in range(0, 300, 100):
        self.c.create_text(j + 25, i + 20, text=items)

Возможно, попробуйте это вместо.

for items in self.test_list:
    for i in range(0, 300, 100):
        for j in range(0, 300, 100):
            self.c.create_text(j + 25, i + 20, text=items)
0 голосов
/ 04 мая 2018

В вашем коде были серьезные проблемы с отступами.
Кроме того, вы не вызывали mainloop ни для одного объекта.
Тогда положение объектов на холсте было за пределами видимого окна:

Я исправил код, чтобы он работал и отображал что-то на холсте; оттуда вы можете изменить его в соответствии со своими потребностями.

import tkinter as tk


class GUI(tk.Frame):
    def __init__(self, master):
        self.test_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        self.c = tk.Canvas(master, width=300, height=300)
        self.c.pack()

        for idx, elt in enumerate(self.test_list):
            row = (idx // 3 + 5) * 20
            col = (idx % 3 + 5) * 20

            self.c.create_text(row, col, text=elt)


if __name__ == '__main__':

    root = tk.Tk()
    root.title("Test")
    root.geometry("300x300")
    GUI(root)
    root.mainloop()
...