2017-10-24 2 views
1

나는 매개 변수 fg = PRIMARY_COLORtkinter.Label를 만드는 경우 내가 PRIMARY_COLOR 변수의 값을 변경하는 경우 .pack()보다가, 위젯의 .update() 방법은 전경색은 변경되지 않습니다 호출합니다. 왜 이런 일이 벌어지는 지 알지만, 어쨌든 위젯이 변수 변경으로 전경색을 바꿀 수 있습니까? 어떤 종류의 "포인터"를 만들 수 있습니까?업데이트는 Tkinter 위젯 매개 변수

답변

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 메소드를 호출해야합니다.