2013-10-18 6 views
0

나는 단지 이것을 이해할 수 없다?캔버스에서 변수를 사용하여 글꼴을 변경하는 방법은 무엇입니까?

from Tkinter import * 

root=Tk() 
rndfont=StringVar() 

rndfont=("Purisa", 10) 
def change(): 
    rndfont=("Purisa", 20, "bold") 

canvas=Canvas(root, width=500, height=500) 
canvas.pack() 
canvas.create_text(50, 20, font=(rndfont), text="change") 

button1 = Button(canvas, text = "change font", command = change, anchor = W) 
button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT) 
button1_window = canvas.create_window(50, 50, anchor=NW, window=button1) 
root.mainloop() 

단순해야하지만 그렇게하지 않는 것 같습니다. 도움을 주셔서 감사합니다.

답변

0

단순히 함수 내에 rndfont을 할당하면 로컬 변수가 만들어집니다. 효과 없음.

canvas.itemconfig을 사용하여 글꼴을 변경하십시오. (그 전에는 반환 값 create_text을 저장해야합니다.)

from Tkinter import * 

root=Tk() 

rndfont=("Purisa", 10) 
def change(): 
    rndfont=("Purisa", 20, "bold") # --> Create local variable. Global varialbe does not change. 
    canvas.itemconfig(text, font=rndfont) # <--- 

canvas=Canvas(root, width=500, height=500) 
canvas.pack() 
text = canvas.create_text(50, 20, font=(rndfont), text="change") 
#^^^ 
button1 = Button(canvas, text = "change font", command = change, anchor = W) 
button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT) 
button1_window = canvas.create_window(50, 50, anchor=NW, window=button1) 
root.mainloop() 
+0

고맙습니다. 나는 전역 변수를 사용하여 시도했지만, IM은 그것을 지나치게 복잡하게 만들까 두려워했다. 다시 한 번 감사드립니다. – user2866860

+0

@ user2866860, [** 수락 ** **] (http://meta.stackexchange.com/a/5235)를 통해 감사의 말을 전할 수 있습니다. – falsetru

+0

rndfont를 StringVar로 설정 한 다음 즉시 그것을 튜플로 변경하고 있습니까? –

관련 문제