2017-11-16 6 views
1

모든 위젯에 tkinter.widget.configure(text="our text")을 사용할 수 없습니까? 이 var_cls 더 쉽게 방법/클래스 등을 공유 할 수변수 클래스는 언제 사용합니까? (BooleanVar, DoubleVar, IntVar, StringVar)

var_cls = tkinter.StringVar() 
tkinter.widget.configure(textvariable=var_cls) 

가 : 장점, 또는 사용의 주요 목적은 무엇인가? 가변 클래스


예 :

import tkinter as tk 
root = tk.Tk() 
tk.Label(root, text="This will be on the label.").pack() 
root.mainloop() 
+1

당신은'Label'과'Entry'에 같은'StringVar'을 할당 할 수 있고'Entry'에서 텍스트를 변경할 때'Label'의 텍스트를 자동으로 바꿀 수 있습니다. – furas

답변

4

tkinter 응용 프로그램에서, StringVar (뿐만 아니라 IntVar, BooleanVarDoubleVar)은 거의 필요하지 않습니다. 기본 tcl/tk 인터프리터는 모든 변수에 대해 특수 기능을 제공하므로 이러한 래퍼는 이러한 기능을 활용합니다.

두 개의 큰 장점은 이러한 변수는 것을 : 두 개 이상의 위젯 모든 시간을 당신이 할 수있는

  • 을 정확히 동일한 정보를 표시 할 수 있도록 당신은 하나 이상의 위젯 하나 개의 변수를 연결할 수 있습니다
    1. 값이 변경 될 때 호출 할 함수를 바인드합니다.

    제 생각에는 특별히 두 가지 기능 중 하나가 필요하지 않으면 사용하지 않는 것이 좋습니다. 위젯 값을 가져 오거나 설정해야하는 경우 위젯 자체에서 수행 할 수있는 메소드가 있습니다 (예 : entry_widget.insert (...), label_widget.configure (text = '...') 등) .

    위에서 언급 한 두 가지 기능을 이용하지 않는 한 별도의 이점을 제공하지 않고 관리해야하는 추가 개체를 도입하여 오버 헤드를 추가한다고 생각합니다.

  • 1

    StringVar이 위젯에 바인딩, 그래서 당신은 단지에 핸들이 필요 할 수 있습니다 가변 클래스없이

    import tkinter as tk 
    root = tk.Tk() 
    var = tk.StringVar(value="This will be on the label.") 
    tk.Label(root, textvariable=var).pack() 
    root.mainloop() 
    

    StringVar이며 값을 수정할 수 있으며 자동으로 업데이트됩니다. 그렇지 않으면 위젯 자체를 처리하고 이벤트 루프 등을 처리해야합니다. 기본적으로 값이 변경 될 수있는 경우 StringVar 등을 사용해야합니다. 정적 인 경우에는 필요하지 않습니다.

    +0

    음, 공정하기 위해서는 위젯에 대한 핸들 또는 변수에 대한 핸들을 유지해야합니다. 두 경우 모두 값을 업데이트하려면 함수를 유지하고 처리하고 호출해야합니다. –