質問
私はTkinterのウィンドウにサーバのルートインスタンスを渡すことによって、TkinterのでPythonのサーバーにGUIを与えることに取り組んでいます。問題は、最新のラベルに記載されている情報を保持している。
たとえば、サーバーはログオンしているユーザーを含む、ユーザーのリストを持っています。これは、最初のリストのためにこれを行うには十分に簡単です。
string = ""
for user in self.server.Users:
string += user + "\n"
Label(master, text=string)
しかし、それは一度だけそれを行います。その後、どのように私は、リストを更新することが出来るのですか?私は、「更新のユーザー」ボタンを追加することもできますが、私は、自己更新するリストを必要とします。
解決
は、サーバーインスタンス上でコールバックを使用することができます。いつでもユーザーリストの変更ラベルを更新するコールバックをインストールします。
サーバー・コードを変更できない場合は、、あなたはアップデートごとに数秒のためのリストをポーリングする必要があります。あなたは、更新を追跡するためのTkinterイベントシステムを使用することができます。
def user_updater(self):
self.user_updater_id = self.user_label.after(1000, self.user_updater)
lines = []
for user in self.server.Users:
lines.append(user)
self.user_label["text"] = "\n".join(lines)
def stop_user_updater(self):
self.user_label.after_cancel(self.user_updater_id)
他のヒント
あなたは例えば、それに対応するLabel
オブジェクトのテキストを設定することにより、StringVar
のテキストを変更します
from tkinter import *
root = Tk()
string = StringVar()
lab = Label(root, textvariable=string)
lab.pack()
string.set('Changing the text displayed in the Label')
root.mainloop()
ラベルset
の表示されたテキストを変更するにはlab
機能の使用に注意してください。
このトピックについて New Mexico Tech
のTkinterのリファレンスを参照してください。詳細については、ます。
所属していません StackOverflow