#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
. Мне нужно настроить три значения переменных и отобразить их на одной метке во время калибровки. Для этого я знаю, что мне нужно получить базовый адрес, но я немного в замешательстве. Заранее большое спасибо