質問

私は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のリファレンスを参照してください。詳細については、ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top