改变TkInter Scale不会更新标签" bg"

时间:2018-02-18 05:10:35

标签: python python-3.x tkinter

这是我的代码:

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保持静止。

1 个答案:

答案 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() 的值,但在这种情况下可能会产生额外的开销。