【问题标题】:Iterating through a list and outputting it through create_text遍历列表并通过 create_text 输出
【发布时间】:2018-05-04 02:22:10
【问题描述】:

我在使用 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()

谢谢你,感谢你的帮助。

【问题讨论】:

  • 会发生什么,您期望什么?
  • GUI 运行时,数字 9 重复 9 次,而不是通过并输出 1 2 3 4 5..etc。这是一张图片:i.imgur.com/eANdqlF.png
  • 您尝试过一些非常基本的调试吗?如果你打电话给print 而不是create_text 会发生什么?输出让你吃惊吗?
  • 闻起来像封口
  • 你试过缩进吗? :) 检查内循环。

标签: python-3.x tkinter tkinter-canvas


【解决方案1】:

您的代码存在严重的缩进问题。
此外,您没有在任何对象上调用 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()

【讨论】:

  • 啊,我以为我修复了我粘贴的代码,但缩进实际上并不像我的 IDE 中的那样。我会把它归咎于我睡眠不足。谢谢!
【解决方案2】:

这有两个外循环。

# 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多