2014-02-05 2 views
0

Я хочу видеть постоянно изменяющееся значение метки в окне tkinter. Но я не вижу ничего, если не буду прерывать клавиатуру в MS-CMD во время работы, показывая мне последнее присвоенное значение для метки. Plz скажите мне. Что происходит & Какой код?питон python не меняется динамически

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 запускается в том же потоке, что и графический интерфейс, и никогда не дает ярлыку возможности обновиться.

Если вы удалите из кода код 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) расписания себя, чтобы быть снова выполняется в 500 мс. slowmotion сначала запускается при первом нажатии кнопки.

Проблема с вашим кодом заключалась в том, что он запускает бесконечный цикл в основном потоке графического интерфейса. Это означает, что после запуска server графический интерфейс не остановится и не будет отображаться текст, который вы попросили отобразить.

+0

Нет. Мне нужно запустить его внутри цикла. Я хочу видеть изменение значения в окне tkinter. Возможно ли с некоторыми изменениями? – jonny789

+0

См. Обновленный ответ :) – mbatchkarov

Смежные вопросы