2017-12-13 16 views
0

私はフレームを持っている、のは言わせて:フレーム内のボタンラベルのテキストを変更するにはどうすればよいですか?

import Tkinter as tk 

class Page1(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label1 = G.tk.Label(self, text="Change me!") 
     label1.pack(pady=10,padx=10) 
     label2 = G.tk.Label(self, text="Change me too!") 
     label2.pack(pady=10,padx=10) 

は今、私は変更することができるようにしたいと思い、「私を変更!」そして「私も変えろ!」ページ上のボタンを押してテキストを表示します。私の実装では、これはローカリゼーションのためのものです。

私の現在の実装では、各言語ごとにフレームが異なりますが、それは維持するのが非常に面倒です。私はコンテンツの各ページに1つのフレームを持ち、表示されているテキストのみを変更したいと考えています。それは可能ですか?

私はStringVarがドキュメントに記載されていますが、使用方法に関する非常に明確なガイドはありません。

+0

を使用することができます。 – furas

+2

'StringVar'を使ってテキストを変更する必要はありません。' label1 ["text"] = "new text" 'しかし、' self.label1'を使って他のラベルにアクセスする必要がありますメソッド。 – furas

+0

ラベルの構成方法によって異なります。第1のオプション:すべてのラベルを 'list'に格納することができます。これは' __init__'で宣言し、それを繰り返します。第2のオプション:継承された 'children' dictを反復することができます。ここでは、' label'のために各子の型をチェックするなどです(ネストされたフレームに対してこれを再帰的に行うオプションがあります)。どちらの場合も、ラベルのテキストを変更することは同じです。 – CommonSense

答えて

1

他の方法のラベルにアクセスするには、self.label1self.label2を使用する必要があります。

あなたはButtonに機能をASSINGし、他の方法でラベルへのアクセス権を持っている `self.`を使うself.label["text"] = "new text"

import tkinter as tk 

class Page1(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 

     self.label1 = tk.Label(self, text="Change me!") 
     self.label1.pack() 

     self.label2 = tk.Label(self, text="Change me too!") 
     self.label2.pack() 

     button = tk.Button(self, text="Change", command=self.change_text) 
     button.pack() 

    def change_text(self): 
     self.label1["text"] = "New text!" 
     self.label2["text"] = "New text too!" 

root = tk.Tk() 

Page1(root, None).pack() 

root.mainloop() 
関連する問題