2014-02-05 4 views
0

tkinter 창에서 레이블 값을 계속 변경하고 싶습니다. 그러나 MS-CMD에서 키보드 인터럽트를 만들어 실행하는 동안 나에게 레이블로 지정된 최신 값을 표시하지 않으면 아무 것도 볼 수 없습니다. Plz 내게 말해 .. 무슨 일이야 & 올바른 코드가 뭐야 ??파이썬 레이블이 동적으로 변경되지 않음

import random 
from Tkinter import * 

def server() : 
while True: 
    x= random.random() 
    print x 
    asensor.set(x) 



app=Tk() 
app.title("Server") 
app.geometry('400x300+200+100') 

b1=Button(app,text="Start Server",width=12,height=2,command=server) 
b1.pack() 

asensor=StringVar() 

l=Label(app,textvariable=asensor,height=3) 
l.pack() 

app.mainloop() 

답변

1

기능 server은 버튼을 클릭 할 때 호출하지만 함수는 무한 루프가 포함되어 있습니다. 난수를 생성하고이를 asensor으로 보냅니다. server 기능이 GUI와 동일한 스레드에서 실행되고 레이블에 업데이트 기회를 부여하지 않으므로 아마이 항목을 볼 수 없습니다.

코드에서 while True 비트를 제거하면 단추를 클릭 할 때마다 새 번호가 생성됩니다. 그게 네가하고 싶었던가? OP에 의해 코멘트 후


편집 : 내가 볼

. 다음과 같이이 경우 코드를 변경해야합니다

import random 
from Tkinter import Tk, Button, Label, StringVar 


def server(): 
    x = random.random() 
    print x 
    asensor.set(x) 


def slowmotion(): 
    server() 
    app.after(500, slowmotion) 


app = Tk() 
app.title("Server") 
app.geometry('400x300+200+100') 
b1 = Button(app, text="Start Server", width=12, height=2, command=slowmotion) 
b1.pack() 
asensor = StringVar() 
asensor.set('initial value') 
l = Label(app, textvariable=asensor, height=3) 
l.pack() 

app.mainloop() 

가 나는 또한 두 가지 일을 새로운 기능, slowmotion 소개 : 1) server를 호출, 디스플레이에게 값을 업데이트하고, 2) 일정 자체로 500ms 후에 다시 실행됩니다. 버튼을 처음 클릭하면 slowmotion이 먼저 실행됩니다.

코드의 문제점은 주 GUI 스레드에서 무한 루프를 실행한다는 것입니다. 즉, server이 실행되면 GUI가 중지되지 않고 표시하도록 요청한 텍스트를 표시 할 수 없습니다.

+0

아니요. 루프 중에 while을 실행해야합니다. 나는 tkinter 창에서 변화하는 가치를보고 싶다. 약간의 수정이 가능합니까 ?? – jonny789

+0

업데이트 된 답변보기 :) – mbatchkarov

관련 문제