나는 매개 변수 fg = PRIMARY_COLOR
와 tkinter.Label
를 만드는 경우 내가 PRIMARY_COLOR
변수의 값을 변경하는 경우 .pack()
보다가, 위젯의 .update()
방법은 전경색은 변경되지 않습니다 호출합니다. 왜 이런 일이 벌어지는 지 알지만, 어쨌든 위젯이 변수 변경으로 전경색을 바꿀 수 있습니까? 어떤 종류의 "포인터"를 만들 수 있습니까?업데이트는 Tkinter 위젯 매개 변수
1
A
답변
1
브라이언이 말했듯이 정확히을 할 수는 없지만 가까이 갈 수는 있습니다.
아래 코드는 StringVar .trace
메서드를 사용하여 해당 StringVar가 변경 될 때마다 Label 색을 변경합니다. 항목을 사용하여 StringVar를 변경하지만 에이 없으면 StringVar가 새 값으로 설정 될 때마다 콜백이 "hello"레이블의 구성을 변경합니다. 'red'와 같은 표준 색상 이름이나 '# ff8800'과 같은 16 진수 코드를 입력 할 수 있습니다.
import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text='hello')
label.pack()
# A StringVar that changes the Label color whenever its value is changed
label_color = tk.StringVar()
label_color.trace("w", lambda *args: label.config(fg=label_color.get()))
# An Entry where we can specify the new color
tk.Label(root, text='Enter a color name or hex number').pack()
e = tk.Entry(root)
e.pack()
# Set the StringVar to the string that the user just entered
def set_colorstring(evt):
s = evt.widget.get()
if s:
label_color.set(s)
e.bind("<Return>", set_colorstring)
root.mainloop()
당신 수 여러 위젯의 설정을 변경하려면이 기술을 사용하지만, 당신이 (콜백에서 위젯의 목록을 통해 예를 들어 루프)를 명시 적으로해야한다. 불행히도 fg
속성을 StringVar로 만들고 색상을 자동으로 업데이트 할 수는 없습니다.
1
아니요, 원하는 것을 수행 할 수 없습니다. 해당 색상을 사용하는 모든 위젯에 대해 configure
메소드를 호출해야합니다.