Я хочу обновлять свой графический интерфейс каждую секунду (на самом деле меня не волнует время, но оно должно быть как в реальном времени). У меня есть скрипт, где на самом деле метка как целое число должна увеличиваться на единицу и отображаться. Но я не получаю изменений, также я хочу разместить метку в соответствии с шириной корня, но она не обновляется. Только с обновлением проблема, может кто поможет с этим. (Я новичок-нуб).
Скрипт:
from tkinter import *
import time
c = 0
root = Tk()
root.title("Real Time Plot")
root.minsize(width = 200, height = 300)
m = root.winfo_reqwidth() / 2
root.update()
Text = Label(root, text = c)
Text.place(x =m, y = 150)
c = c + 1
print(m)
root.mainloop()






Вы обновляете только значение переменной, а не значение метки. Вам нужно обновить метку содержимым c после ее увеличения:
Text.configure(text=c)
Так что получается что-то вроде этого:
from tkinter import *
import time
c = 0
root = Tk()
root.title("Real Time Plot")
root.minsize(width = 200, height = 300)
m = root.winfo_reqwidth() / 2
root.update()
Text = Label(root, text = c)
Text.place(x =m, y = 150)
root.update()
time.sleep(2)
c = c + 1
Text.configure(text=c)
root.update()
print(m)
root.mainloop()
Я сделал небольшое обновление вашего кода, например, добавил время сна, чтобы лучше показать поведение.
ОП написал: «Проблема только с обновлением, может быть, кто-то может мне помочь с этим». Предоставленный код обновляет значение и четко объясняет, как это сделать. Так что, возможно, вам следует быть более осторожным при комментировании решений, предоставленных другими.
Говоря об OP, он четко сказал слово Realtime, которое, я уверен, вы пропустили. Кроме того, он сказал разместить метку в соответствии с шириной корня, что вы тоже пропустили. Тогда, возможно, вам следует внимательно прочитать проблему или хотя бы сделать рабочий код.
Всем спасибо за быстрый ответ. @Samaksh Gupta, я посмотрел ваш код и нашел альтернативу для проблемы с шириной и высотой: root_height = root.winfo_height() root_height = int(root_height) Возможно только с помощью вашего кода, спасибо :)
Вы должны использовать Python Threading, который сделает это безупречно!
Вот код:
from tkinter import *
import threading
import time
def realtime_update():
while True:
global c, Text
c += 1
Text.configure(text=c+1)
time.sleep(0.001)
root_width = root.winfo_geometry()
root_width = root_width.split('x')
root_width = int(root_width[0])
Text.place(x=root_width/2, y=150)
time.sleep(0.01)
c = 0
root = Tk()
root.title("Real Time Plot")
root.minsize(width = 200, height = 300)
m = root.winfo_reqwidth() / 2
Text = Label(root, text = c)
Text.place(x=int(m), y = 150)
print(m)
threading.Thread(target=realtime_update, daemon=True).start()
root.mainloop()
Он решает следующее:
Я создал таймер, поэтому я полагаю, что вы можете сделать это, как я. Надеюсь, что это работает для вас.
Сначала создайте StringVar:
текст = StringVar (значение = "текст")
Затем создайте метку с текстовой переменной. ваша метка = метка (корень, текстовая переменная = текст)
А затем просто создайте функцию, которая будет обновлять вашу метку: yourlabel.set(и здесь вы передаете новое значение)
Итак, ваш yourlabel будет иметь значение, которое вы передали. Итак, вы можете использовать что-то вроде self.after для обновления функции каждые 1000 мс.
Я просто хотел знать, как обновить графический интерфейс tkinter, но спасибо за ответ.
Не работает. Значение изменяется с
0на1и останавливается на достигнутом.