【发布时间】:2020-06-18 10:07:29
【问题描述】:
谁能帮我解决这个问题:我有一个字典列表,其中存储了未来 Tkinter 矩形的信息。一旦创建了矩形,我试图让它们根据“x”值的变化而改变颜色,但它只适用于最后创建的对象,而不适用于其余的对象,这是一个代码:
from tkinter import *
a = {
"y":2,
"len" : 4
}
b = {
"y":5,
"len" : 7
}
c = {
"y":6,
"len" : 8
}
d = {
"y":2,
"len" : 4
}
e = {
"y":4,
"len" : 12
}
f = {
"y":3,
"len" : 10
}
g = {
"y":7,
"len" : 10
}
groupe = [a,d, b, c, g, e, f]
xt1 = 800
xt2= 800
yt1=720
yt2=0
master = Tk()
root = Canvas(master, width=800, height=720)
root.pack()
#Moving RedLine
def deplacer():
global xt1, yt1, xt2, yt2
xt1-=5
xt2-=5
root.coords(laser_print, xt1, yt1, xt2,yt2)
root.after(50,deplacer)
return
#drawing blocks
graf_dist = 0
dist_betw=0
untouched = "blue"
being_touched = "red"
touched= "gray"
block_color=untouched
for ensemble in groupe:
graf_dist+=60
dist_betw+=10
xo=graf_dist+dist_betw
yo=int(ensemble['y']*50)
xl=xo+60
yl=int(ensemble['len']*50)
if xo<=xt1 and xl>xt1:
block_color=being_touched
elif xo<xt1 and xl<=xt1:
block_color=untouched
drawing_block = root.create_rectangle(xo, yo, xl, yl, fill=block_color, tag="blocks")
#draw horizontal redline
laser_print=root.create_line(xt1, yt1, xt2, yt2, fill="red")
#updating the color of the rectangles
def update_color():
x_block=xt1+1
untouched = "blue"
being_touched = "red"
touched= "gray"
block_color=untouched
if xo<=x_block and xl>x_block:
block_color=being_touched
elif xo<x_block and xl<=x_block:
block_color=untouched
root.itemconfig(drawing_block, fill=block_color)
root.after(50,update_color)
update_color()
deplacer()
mainloop()
【问题讨论】:
-
仅适用于最后创建的对象:
xo具有最后一个.create_rectangle(x0, ...的值,并且从未更改。您必须循环 创建的矩形 才能找到匹配的xo。阅读Tkinter.Canvas.find_...-method's -
谢谢你,stovfl,要试试这个