2

サーバーのルートインスタンスをTkinterウィンドウに渡すことにより、tkinterを使用してPythonサーバーにGUIを提供することに取り組んでいます。問題は、ラベルの情報を最新に保つことです。

たとえば、サーバーには、ログオンしているユーザーを含むユーザー リストがあります。最初のリストに対してこれを行うのは簡単です:

string = ""
for user in self.server.Users:
  string += user + "\n"

Label(master, text=string)

しかし、それは一度しかできません。その後、どのようにリストを更新すればよいでしょうか? 「ユーザーの更新」ボタンを追加できますが、リストを自動更新する必要があります。

4

2 に答える 2

3

サーバー インスタンスでコールバックを使用できます。ユーザー リストが変更されるたびにラベルを更新するコールバックをインストールします。

サーバー コードを変更できない場合は、数秒ごとに更新リストをポーリングする必要があります。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)
于 2009-04-21T18:06:49.567 に答える
2

のテキストを変更するに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()

setLabel の表示テキストを変更する関数の使用に注意してくださいlab

詳細については、このトピックNew Mexico Techに関する Tkinter リファレンスを参照してください。

于 2009-04-26T07:35:22.323 に答える