変更するJSONファイルのテキストに基づいてラベルを自動的に更新する必要があります。私はいくつかのStackOverflowの記事でStringVar()
がラベルテキストを変数にリンクするためのtkソリューションを内蔵していることをよく読んでいます。ページクラスpythonのtkinterラベルのテキスト
私の質問は、下記のPage
クラス(このページのコードのみ)からのラベルのみを更新しようとしています。つまり、Page
は大きなアプリのどこかで呼び出され、Page
はJSONファイルから適切な値でラベルをロードする必要があります。
他のほとんどの投稿は、別の方法(つまり、ページ上のクリックイベント)からラベルを更新するアプローチです。しかし、私は常に更新されているjsonファイルからデータをロードするいくつかのページを持っています。
私は "PY_VAR1を" と言ってラベルテキストを取得するコードを実行すると(はを解決)。これをどうやって解決するのですか?
Page
に最初にアクセスすると、ラベルテキストが正しい(初期化が正しく機能した)。しかし、他のアプリケーションページにアクセスしてからPage
が返されると、ラベルテキストは更新されたjson値ではなく、初期化された値のままです。初期化後にラベル値を更新するにはのみPage
コードを使用していますか?
注 - Python Tkinter, modify Text from outside the classは問題に似ていますが、私はからクラス内のテキストを変更したいです。
PY_VAR1アップデート:text = "Test Type: {}".format(data['test_type'])
で固定
PY_VAR1の問題。しかし、jsonコンテンツの変更を伴うラベルの自動更新を成功させるには、まだ解決策が必要です。
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")
あなた 'test_type'はtk.StringVar''のインスタンスです。 'str()'を実行すると、 'tk.StringVar'の割り当てられた名前を返すだけです。 – abccd
@abccd 'TypeErrorをエンコードしたためにstr()を使用しました: 'StringVar'オブジェクトをstrに暗黙的に変換できません。 'エラー –
' label = ttk.Label(self、text = "テストタイプ:{} "。format(data ['test_type']))'? – abccd