मेरे पास यह लूप है जो एक्स चलाता है और बदलता है, मुझे इसे टिंकर लेबल में कैसे रखना चाहिए? अग्रिम में धन्यवाद।

from tkinter import *
import time

root = Tk() 

def x_loop():
    x = 0
    while x <= 100:
        time.sleep(2)
        x = x + 1
        
l = Label(root, text = x_loop).pack(pady = 20)

root.mainloop()
0
Markas Povilaika 18 अप्रैल 2021, 12:21

2 जवाब

सबसे बढ़िया उत्तर

टिंकर डोसेंट, जबकि लूप्स की तरह, इसका कारण यह है कि थोड़ी देर के लिए लूप डोसेंट मेनलूप पर वापस आने तक वापस आ जाता है और इसलिए आप इस समय के दौरान काम नहीं कर रहे हैं।

टिंकर इसके लिए .after(*ms,*func) विधि प्रदान करता है और नीचे प्रयोग किया जाता है। tk.Label के टेक्स्ट को बदलने के लिए भी आप कई तरीके अपना सकते हैं। मुझे लगता है कि इनहेरिट किए गए विकल्प textvariable का उपयोग करने का सबसे अच्छा तरीका है।

जैसे ही var सेट होता है, टेक्स्टवैरिएबल एक tk.*Variable होना चाहिए और tk.Label को कॉन्फ़िगर करना चाहिए।

नीचे काम कर रहे उदाहरण की जाँच करें:

import tkinter as tk

x = 0
def change_text():
    global x
    var.set(x)
    x +=1
    root.after(100,change_text)#instead of a while loop that block the mainloop

root = tk.Tk()
var = tk.StringVar()
lab = tk.Label(root, textvariable=var)
lab.pack()
change_text()

root.mainloop()
2
Atlas435 18 अप्रैल 2021, 09:37

StringVar को @ Atlas435 के रूप में उपयोग करने के बजाय, आप इस सरल विधि का उपयोग कर सकते हैं:

import tkinter as tk

def x_loop():
    global x
    if x <= 100:
        x += 1
        # Update the label
        label.config(text=x)
        # after 2000 ms call `x_loop` again
        root.after(2000, x_loop)

x = 0
root = tk.Tk()

label = tk.Label(root, text=x)
label.pack(pady=20)

# STart the loop
x_loop()

root.mainloop()
1
TheLizzard 18 अप्रैल 2021, 09:47