2014-04-26 3 views
2

버튼을 클릭하여 파이썬 레이블의 내용을 업데이트하려고합니다. 각 클릭에 대해 카운터가 올라가고 레이블 값은 카운터 (j)의 현재 값에 의해 업데이트됩니다. 코드는 다음과 같습니다.클릭하면 파이썬을 사용하여 레이블 내용 업데이트

import time 
import random 
import MySQLdb 
from Tkinter import * 
j=0 

def PrintNumber(): 
    global j 
    j+=1 
    print j 
    return  

mgui=Tk() 
mgui.geometry('200x200') 
mgui.title('Queue System') 

st = Button(mgui, text="Next Customer", command = PrintNumber) 
st.pack() 
f = PrintNumber() 
label = Label(mgui, text=f) 
label.pack() 

mgui.mainloop() 

제발, 친절 하구나, 파이썬으로. :)

답변

3

을 변경할 수 있습니다. 변수 클래스 인스턴스에 Label 위젯의 textvariable 옵션을 지정하면 인스턴스 값이 변경 될 때 자동으로 업데이트됩니다. 여기

from Tkinter import * 


root = Tk() 

var = IntVar() # instantiate the IntVar variable class 
var.set(0)  # set it to 0 as the initial value 

# the button command is a lambda expression that calls the set method on the var, 
# with the var value (var.get) increased by 1 as the argument  
Button(root, text="Next Customer", command=lambda: var.set(var.get() + 1)).pack() 

# the label's textvariable is set to the variable class instance 
Label(root, textvariable=var).pack() 

mainloop() 
1

당신은 당신이 값을 유지하기 위해 Tkinter를 variable class 인스턴스를 사용할 수 있습니다 label.config()를 사용하여 (이 경우 PrintNumber()) 명령에 응답하는 함수에서 레이블 텍스트, 예컨대 :

from tkinter import * 

def PrintNumber(): 
    global j,label 
    j+=1 
    label.config(text=str(j)) 
    return  

j = 0 

mgui=Tk() 
mgui.geometry('200x200') 
mgui.title('Queue System') 

st = Button(mgui, text="Next Customer", command = PrintNumber) 
st.pack() 
label = Label(mgui, text=str(j)) 
label.pack() 
mgui.mainloop() 
+0

'str을 할 수있는 또 다른 방법, 및 대체 작성한다 : 다음은 그 예이다 configure는 주목할 가치가있다 :'label.config (text = str (j))'는'label [ "text"] = j'와 동일하다. Pedalically, 당신이 변수를 쓰지 않기 때문에'global label'은 필요하지 않습니다. – FabienAndre

+0

굉장! 그것은 작동합니다! 고마워요. – Labrosb

+0

@ ather0s : 다행히 우리가 당신의 문제를 해결했습니다. 문제가 해결되었음을 보여주고 다른 사람들을 도우 려하지 않으려면 답변 중 하나를 선택하여 수락했음을 보여줄 수 있습니다. 개인적으로, 나는 atlasologist가 제공하는 솔루션이 가장 우아하다고 생각합니다. 그래서 당신이 그것을 받아 들일 것을 권합니다. – Simon

0

j`이 (가 알아서 Tkinter를) 필요하지 않습니다 당신이`에`) (이

import time 
import random 
import MySQLdb 
from Tkinter import * 


def PrintNumber(label): 
    PrintNumber.counter += 1 #simulates a static variable 
    print PrintNumber.counter 
    label.configure(text=str(PrintNumber.counter)) #you update label here 

mgui=Tk() 
mgui.geometry('200x200') 
mgui.title('Queue System') 

PrintNumber.counter = 0 #add an attribute to a function and use it as a static variable 

label = Label(mgui) #create label 

#pass the label as parameter to your function using lambda notation 
st = Button(mgui, text="Next Customer", command=lambda label=label:PrintNumber(label)) 
st.pack() 
label.pack() 

mgui.mainloop() 
관련 문제