【问题标题】:Python - Tkinter - Finding the loopPython - Tkinter - 寻找循环
【发布时间】:2021-05-17 10:17:11
【问题描述】:

我又一次被卡住了。

在画布中,我显示 9 张图像每 8 行添加一列。这仅用于测试目的。最后,图像应该是数百个。 我正在尝试用唯一的编号识别每个图像。为了做到这一点,我有一个事件,它给了我画布的坐标。这里是菜鸟部分。要获得这个唯一号码,我的代码是

 if x_on_grid==0 and y_on_grid==448:
        index_bin=0
    elif x_on_grid==0 and y_on_grid==384:
        index_bin=1
    elif x_on_grid==0 and y_on_grid==320:
        index_bin=2
    elif x_on_grid==0 and y_on_grid==256:
        index_bin=3
    elif x_on_grid==0 and y_on_grid==192:
        index_bin=4
    elif x_on_grid==0 and y_on_grid==128:
        index_bin=5
    elif x_on_grid==0 and y_on_grid==64:
        index_bin=6
    elif x_on_grid==0 and y_on_grid==0:
        index_bin=7
    elif x_on_grid==64 and y_on_grid==448: #new column
        index_bin=8
    elif x_on_grid==64 and y_on_grid==384:
        index_bin=9

当然它工作得很好,但它根本不科学。 我正在尝试通过循环减少所有这些行,但我无法获得所需的数量,只有最后一个。

有什么想法吗?

最好的

【问题讨论】:

  • 你知道,但使用canvas.create_stuff会返回一个ID。所以基本上说 image1 = canvas.create_image(*args, **kwargs) 将导致 image1 是一个整数,例如 1 所以没有必要做你正在做的事情
  • 类似index_bin = (448 - y_on_grid) // 64 + 8 * (x_on_grid // 64) - 您可能想用变量替换一些常量以容纳更多图像。
  • @Thierry Lathuille:超级!!!
  • 我会使用标签。创建对象时,您可以为其添加标签作为标识符。使用类似image-001 的东西。当用户点击时,使用画布find_closest方法判断你点击的是哪个对象,并获取对象的标签,找出它的索引是什么。

标签: python loops tkinter


【解决方案1】:

考虑下面的代码

import tkinter as tk

def onclick(event):
    print(vars(event))
    nearest = event.widget.find_closest(event.x,event.y)
    nearest_tag = event.widget.gettags(nearest)[0]
    print(nearest_tag)

def drawCircles(c):
    size = 20
    for i in range(100):
        row = i % 10
        col = i // 10
        x1 = (row * size) + 30
        y1 = (col * size) + 30
        c.create_oval((x1,y1,x1+size,y1+size),tags="image_%03d" % i)

root = tk.Tk()
c = tk.Canvas(root,width=400,height=400,bg="white")
c.grid()
c.bind("<Button-1>",onclick)

drawCircles(c)
root.mainloop()

我使用的是圆形(椭圆形)而不是图像,但原理仍然相同。我画了 100 个圆圈,然后在画的时候为它们分配一个标签,格式为image_?。当我在画布上单击时,find_closest 方法用于确定哪个圆圈最接近单击。然后它会查找该对象的标签(或多个标签)并将其打印出来。

不需要冗长的 if-elif-else 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多