这是我的代码:
slowColor = (255,0,255)
window = Tk()
window.title = 'Mouse Tracker'
label1 = Label(window, text='Slow Color')
label1.grid(row=1, column=3, columnspan=5)
label2 = Label(window, bg='#%02x%02x%02x' % slowColor)
label2.grid(row=2, column=1, rowspan=2, columnspan=9, sticky=NW+SE)
label3 = Label(window, text='R')
label3.grid(row=4, column=2)
label4 = Label(window, text='G')
label4.grid(row=4, column=5)
label5 = Label(window, text='B')
label5.grid(row=4, column=8)
slider1 = Scale(window, from_=255, to=0)
slider1.grid(row=5, column=2, rowspan=6)
slider2 = Scale(window, from_=255, to=0)
slider2.grid(row=5, column=5, rowspan=6)
slider3 = Scale(window, from_=255, to=0)
slider3.grid(row=5, column=8, rowspan=6)
label2.config(bg='#%02x%02x%02x' % (slider1.get(), slider2.get(), slider3.get()))
应该发生的事情是改变其中一个滑块的价值,应该改变" bg" label2的颜色。但这并没有发生。 Label2保持静止。
答案 0 :(得分:2)
"更改TkInter Scale不会更新标签“bg”"
这是错误的。您拥有的Scale
小部件的值为0,并且您将label2
的背景配置为它们在0时的值,因此标签为黑色,如{{ 1}}是黑色的。
为了在'#000000'
的值发生变化时动态更新内容,请使用Scale
中的command
选项:
Scale
或者,命令已经传递def update():
global label2, slider1, slider2, slider3
label2.config(bg='#%02x%02x%02x' % (slider1.get(), slider2.get(), slider3.get()))
...
slider1['command'] = lambda scale_value: update()
slider2['command'] = lambda scale_value: update()
slider3['command'] = lambda scale_value: update()
的值,但在这种情况下可能会产生额外的开销。