Как отобразить значение на метке tkinter при выполнении калибровочных работ

#python #tkinter

#python #tkinter

Вопрос:

Я работаю над приложением, в котором у меня было четыре кнопки с именами CAL, ENT, INC, DEC. И когда я нажал кнопку CAL, значение range_H отображалось на метке tkinter, и после этого я корректирую значение с помощью кнопок INC и DEC, а после этого, нажав кнопку ENT, я сохранил это значение в файле .txt.

Моя проблема заключается в том, что когда я меняю значения с помощью кнопок INC и DEC, значение не обновляется на метке tkinter.

Итак, я попробовал root.after(100,cal) .Таким образом, значения обновляются на метке tkinter, но она не уничтожается после нажатия кнопки ENT.

Я новичок как в Python, так и в tkinter.Так что, возможно, я допустил какую-то глупую ошибку, чтобы сделать это так.

Полный код

 import os
import tkinter as tk

root = tk.Tk()
root.geometry("300x240")
range_High = tk.StringVar()
range_H = 32767

file=open("D:data/file_log.txt","w")
if os.stat("D:data/file_log.txt").st_size==0:
    file.write("rangeHigh,n")
file.write(str(range_H))
file.flush()

def cal():
    global range_High
    root.rangeLabel = tk.Label(root, textvariable=range_High)
    root.rangeLabel.grid(row=0)
    range_High.set(range_H)
 #   root.after(100,cal)

def enter():
    global range_High
    file=open("D:data/file_log.txt","w")
    if os.stat("D:data/file_log.txt").st_size==0:
       file.write("rangeHigh,n")
    file.write(str(range_H))
    file.flush()
    root.rangeLabel.destroy()
def inc():
    global range_H
    range_H = range_H   1
def dec():
    global range_H
    range_H = range_H - 1
root.Bt1=tk.Button(root,text="cal",bg="red",command=cal)
root.Bt1.pack()
root.Bt1.place(x=200,y=100)
root.Bt2=tk.Button(root,text="ent",bg="red",command=enter)
root.Bt2.pack()
root.Bt2.place(x=200,y=130)
root.Bt3=tk.Button(root,text="inc",bg="red",fg="white",command=inc)
root.Bt3.pack()
root.Bt3.place(x=200,y=160)
root.Bt4=tk.Button(root,text="dec",bg="red",fg="white",command=dec)
root.Bt4.pack()
root.Bt4.place(x=200,y=190)


#root.after(100,cal)
root.mainloop()
  

Ответ №1:

Установите переменную range_High.set(range_H) в функции inc и dec для обновления на экране.

Пожалуйста, измените пути к файлам, которые я изменил, чтобы они соответствовали моим.

 import os
import tkinter as tk

root = tk.Tk()
root.geometry("300x240")
range_High = tk.StringVar()
range_H = 32767

file=open(r"C:Usersvignesh.rajendranPythonpracticeStackoverflowTkinter/file_log.txt","w")
if os.stat(r"C:Usersvignesh.rajendranPythonpracticeStackoverflowTkinter/file_log.txt").st_size==0:
    file.write("rangeHigh,n")
file.write(str(range_H))
file.flush()

def cal():
    global range_High
    root.rangeLabel = tk.Label(root, textvariable=range_High)
    root.rangeLabel.grid(row=0)
    range_High.set(range_H)
 #   root.after(100,cal)

def enter():
    global range_High
    file=open(r"C:Usersvignesh.rajendranPythonpracticeStackoverflowTkinter/file_log.txt","w")
    if os.stat(r"C:Usersvignesh.rajendranPythonpracticeStackoverflowTkinter/file_log.txt").st_size==0:
       file.write("rangeHigh,n")
    file.write(str(range_H))
    file.flush()
    root.rangeLabel.destroy()
def inc():
    global range_H
    range_H = range_H   1
    range_High.set(range_H)

def dec():
    global range_H
    range_H = range_H - 1
    range_High.set(range_H)
    
root.Bt1=tk.Button(root,text="cal",bg="red",command=cal)
root.Bt1.pack()
root.Bt1.place(x=200,y=100)
root.Bt2=tk.Button(root,text="ent",bg="red",command=enter)
root.Bt2.pack()
root.Bt2.place(x=200,y=130)
root.Bt3=tk.Button(root,text="inc",bg="red",fg="white",command=inc)
root.Bt3.pack()
root.Bt3.place(x=200,y=160)
root.Bt4=tk.Button(root,text="dec",bg="red",fg="white",command=dec)
root.Bt4.pack()
root.Bt4.place(x=200,y=190)


#root.after(100,cal)
root.mainloop()
  

Комментарии:

1. Большое вам спасибо, это то, что я хочу.

2. Не могли бы вы мне еще немного помочь. На самом деле в этом приложении есть три переменные, то есть range_H , offset и full_scale . Мне нужно настроить три значения переменных и отобразить их на одной метке во время калибровки. Для этого я знаю, что мне нужно получить базовый адрес, но я немного в замешательстве. Заранее большое спасибо