2017-02-06 6 views
1

エントリウィジェットへの入力が完了した後にtkinterウィジェットを更新する方法はありますか?エントリボックスをチェックしてtkinterに情報をロードする

https://i.stack.imgur.com/egSX6.png

オリジナルエロプログラムはAccessのフォームで行いました。プレーヤーのエントリがいっぱいになると、$で示されるLabel/Entriesがデータベースを検索し、情報を表示します。

GUIの実行中にラベルを更新する方法はありますか? Entryフィールドの文字数が3文字の場合、トリガが発生する可能性があります。私は/ GUIが既に実行された後にラベル/エントリの更新を行うことが可能であるかどうかわからない。

編集:

def update_winner(): 
    cursor = conn.cursor() 
    winner = winner_id.get() 
    school = school_name.get() 
    temp = school+winner 

    if len(temp) == 5: 

     cursor.execute("SELECT Rating FROM KIDS WHERE LocalID = ?", temp) 
     rating=cursor.fetchval() 
     cursor.execute("SELECT FirstName FROM KIDS WHERE LocalID = ?", temp) 
     name=cursor.fetchval() 

     winner_name.set(name) 

loser_id.trace("w",update_loser) 
winner_id.trace("w",update_winner) 

ratings.mainloop() 

私はこのようなコードを実行する、とすぐに私はwinner_idボックスにテキストを入力すると、私はこのエラーを取得する:TypeError例外:update_winner()0位置引数を取りますが、3は

を与えられました
+0

この説明によれば、Azureには関係していないようです。そうでない場合は、Azureの使用に関する説明を改善してください。 –

答えて

3

インスタンスウィジェットにStringVarのインスタンスを関連付けることができますし、変数にトレースを配置します。変数値が変更されるたびにトレースが呼び出され、ユーザーが入力ウィジェットに入力するたびに値が変更されます。

呼び出される関数では、configureメソッドでラベルに表示される値を変更できます。

ここに簡単な例があります。この例では、入力ウィジェットを入力すると、ラベルが更新され、入力された内容が表示されます。

import tkinter as tk 

class Example(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 

     self.v1 = tk.StringVar() 
     self.e1 = tk.Entry(self, textvariable=self.v1) 
     self.l1 = tk.Label(self) 

     self.e1.pack(side="top", fill="x") 
     self.l1.pack(side="top", fill="x") 

     self.v1.trace("w", self.on_change) 

    def on_change(self, *args): 
     self.l1.configure(text="You entered: '%s'" % self.v1.get()) 

root = tk.Tk() 
Example(root).pack(fill="both", expand=True) 
root.mainloop() 

データベース内の値をルックアップするなど、変数トレースで必要な操作を行うことはもちろん可能です。

+0

python 3.6では、 'trace'メソッドは古くなったTclコマンドを使用し、新しい' trace_add'メソッド(https://docs.python.org/3/whatsnew/3.6.html、tkinterセクション)を代わりに使用する必要があります。構文は少し異なります: 'self.v1.trace_add(" write "、self.on_change)'。 –

+0

半関連の質問:tkinterのすべての例で、クラスを使用してtkinterフレームを保持する理由は何ですか?それはベストプラクティスですか、それとも必要なのですか?現在、私のコードは、どのメソッドやクラスにもtkinterコードを持っていません。プログラムの初期化から始まります。変更する必要がありますか? – user3364161

+0

@ user3364161:間違いなく、必要ありません。クラスを使用すると、グローバルを使用せずにデータを共有する方法が提供され、読みやすくなるようにコードを表示するのが簡単になります(例:メソッドを使用するコードより後でファイルでメソッドを定義できます。) –

関連する問題