gpt4 book ai didi

python - 如何创建以变量命名的 python tkinter Canvas 对象并保留此链接以重新配置该对象?

转载 作者:行者123 更新时间:2023-12-01 02:43:14 24 4
gpt4 key购买 nike

这是我的第一篇文章,所以我要感谢社区。由于你的经验,直到现在我才不得不问自己的问题。

这是我的问题:

  • 如果您查看下面的示例脚本,您会发现我使用循环在 tKinter Canvas 中创建对象。
  • 在此循环中,我创建了名为“name”的变量,值为“objectx”
  • 我尝试使用此变量“名称”来绘制对象(此处为文本对象)。

这样做时,我希望使用“名称”变量值,我能够删除/配置/移动对象。但不是。我的对象仍然链接到“name”而不是“objectx”。 Python 返回“NameError:名称“object2”未定义”

有人知道我可以在 Canvas 对象之间建立链接并保持其与其交互的解决方案吗?

非常感谢

import tkinter as tk

def popup(event):
print('Got object click', event.x, event.y)
print(event.widget.find_closest(event.x, event.y))
lvl01 = tk.Toplevel(bd = 1, bg = 'black')
time.sleep(2)
print('2sec')


if __name__ == '__main__':

root = tk.Tk()

can = tk.Canvas(root, width = 400, height = 400)
can.pack()

x = 0
while x < 10:
x = x + 1
name = "object" + str(x)
print(name)
name = can.create_text(x * 30, x * 30, text = 'hello')

can.delete(object2)

最佳答案

您认为您正在将名为 object2(或其他数字)的变量绑定(bind)到 can.create_text。

您实际上要做的是首先将名为 name 的变量绑定(bind)为字符串“object2”,然后将其重新绑定(bind)到 can.create_text 调用的返回值。

有不止一种方法可以实现第一个结果,但在这种情况下,我想到的一种允许通过名称快速访问的方法是创建一个像这样的字典:

windows = {}
x = 0
while x < 10:
x = x + 1
name = "object" + str(x)
print(name)
windows[name] = can.create_text(x * 30, x * 30, text = 'hello')

can.delete(windows[object2])

关于python - 如何创建以变量命名的 python tkinter Canvas 对象并保留此链接以重新配置该对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45481063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com