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
графический интерфейс не остановится и не будет отображаться текст, который вы попросили отобразить.
Нет. Мне нужно запустить его внутри цикла. Я хочу видеть изменение значения в окне tkinter. Возможно ли с некоторыми изменениями? – jonny789
См. Обновленный ответ :) – mbatchkarov