Ich muss ein Label basierend auf Text in einer sich ändernden JSON-Datei automatisch aktualisieren. Ich habe in mehreren StackOverflow-Posts gelesen, dass StringVar()
eine gute integrierte tk-Lösung zum Verknüpfen von Etikettentext mit einer Variablen ist.update tkinter label text in der Seitenklasse python
Meine Frage unterscheidet sich von anderen Posts darin, dass ich versuche, das Etikett nur aus der Page
Klasse, die unten aufgeführt ist, zu aktualisieren (in nur dem Code für diese Seite). Mit anderen Worten, Page
wird irgendwo in einer größeren App aufgerufen - und Page
muss die Bezeichnung mit dem entsprechenden Wert aus der JSON-Datei laden.
Die meisten anderen Posts nähern sich Label-Aktualisierung von einer separaten Methode (d. H. Ein Klick-Ereignis auf der Seite). Ich habe jedoch mehrere Seiten, die Daten aus einer JSON-Datei laden, die ständig aktualisiert wird.
(aufgelöst) Wenn ich den Code ausführen bekomme ich Label Text sagen "PY_VAR1". Wie behebe ich das?
Wenn
Page
zum ersten Mal aufgerufen wird, ist der Beschriftungstext korrekt (Initialisierung funktionierte ordnungsgemäß). Wenn jedoch auf andere Anwendungsseiten zugegriffen wird und dannPage
zurückgegeben wird, bleibt der Beschriftungstext auf dem initialisierten Wert und nicht auf dem aktualisierten JSON-Wert. Wie kann der Label-Wert nach der Initialisierung nur mitPage
Code aktualisiert werden?
Hinweis - Python Tkinter, modify Text from outside the class ähnelt dem Problem, aber ich möchte den Text aus innerhalb die Klasse ändern.
PY_VAR1 Update:
PY_VAR1 Ausgabe mit text = "Test Type: {}".format(data['test_type'])
fixiert. Allerdings benötigen Sie immer noch eine Lösung für erfolgreiche automatische Updates des Labels mit JSON-Content-Änderungen.
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
# File system access library
import glob, os
import json
class Page(tk.Frame):
test_type = tk.StringVar()
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# app controller
self.controller = controller
test_type = tk.StringVar()
# Read json file
with open('data.json','r') as f:
data = json.load(f)
test_type.set(data['test_type'])
label = ttk.Label(self, text=str("Test Type: " + str(test_type)))
label.pack(pady=1,padx=1, side = "top", anchor = "n")
button = ttk.Button(self, text="Previous Page",
command=lambda: controller.show_page("Save_Test_Page"))
button.pack(pady=1,padx=15, side = "left", expand = "no", anchor = "n")
Ihre 'test_type' ist eine Instanz von' tk.StringVar'. Mit '' str() ''geben Sie einfach den zugewiesenen Namen für die' tk.StringVar' zurück. – abccd
@abccd Ich benutze str() wegen, wenn ich ein 'TypeError' gefunden habe: 'StringVar' Objekt kann nicht in str implizit konvertiert werden ' –
car't du nur 'label = ttk.Label (self, text =" Test Type : {} ". format (daten ['test_type']))'? – abccd