tkinterを使用した画面表示のリアルタイム更新について

実現したいこと

使用言語はPython3です。今現在、tkinterを使用したGUIの開発をしております。データベース(Postgresql)と連携してデータベースのテーブルをリアルタイムで画面に表示したいです。
プログラムを実行して画面に表示するところまでは一応できたのですが、プログラムを実行した時点での
テーブルの画面が表示されるだけで、その後データベース側の値が変わったら、その反映が画面上されません。理想としては、10~20秒おきに画面が最新のデータベースの表を読み込んでくるようにしたいです。プログラムのどこをどのように修正すれば所望の動作ができるようになるのでしょうか。
ご教示いただけますと幸いです。

発生している問題・分からないこと

『実現したいこと』に記載した通りです。
都合上隠さないといけないところは、プログラムに『※』をつけています。

該当のソースコード

Python3

1# モジュールのインポート 2import tkinter as tk 3import tkinter.ttk as ttk 4import sys 5sys.path.append('/home/pi/.local/lib/python3.7/site-packages') 6import psycopg2 7 8# データベースの接続 9conn = psycopg2.connect(host='※※※.※※※.※※.※※', 10 port='5432', 11 user='postgres', 12 password='※', 13 dbname='※') 14 15# SELECT文の作成 16sql = "select ※,※ from ※" 17 18# ルートフレームの作成 19root = tk.Tk() 20root.title('※') 21root.geometry('600x600') 22# ツリービューの作成 23tree = ttk.Treeview(root, height=28) 24 25# 列インデックスの作成 26tree["columns"] = (1,2) 27# 表スタイルの設定(headingsはツリー形式ではない、通常の表形式) 28tree["show"] = "headings" 29# 各列の設定(インデックス,オプション(今回は幅を指定)) 30tree.column(1,width=300) 31tree.column(2,width=300) 32# 各列のヘッダー設定(インデックス,テキスト) 33tree.heading(1,text="※") 34tree.heading(2,text="※") 35 36# メインフレームの作成と設置 37frame = ttk.Frame(root) 38frame.pack(fill = tk.BOTH, padx=0,pady=5) 39 40# ボタンイベントの追加 41def btn5_click(): 42 tree.quit() 43 44# ボタンの配置 45btn1 = tk.Button(frame, text="画面を消す", font=("MSゴシック", "15"), command=btn5_click) 46# 各種ウィジェットの設置 47btn1.pack() 48 49cursor = conn.cursor() 50cursor.execute(sql) 51 52for r in cursor.fetchall(): 53 # ツリービューの要素に追加 54 tree.insert("","end",values=r) 55 56# ツリービューの配置 57tree.pack(pady=0) 58 59root.mainloop()

試したこと・調べたこと

上記の詳細・結果

自身が調べたこととして、自身が作成したプログラムの以下の部分に
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for r in cursor.fetchall():
# ツリービューの要素に追加
tree.insert("","end",values=r)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ここの部分にtkinterに用意されているafter()メソッドがうまく使えないかと考えました。
でもこのメソッドは、一定時間経過後に関数を実行するメソッドなのでだめではないかと思います。

自身が所望している動作は、データベースから読んできた画面に表示されている表をリアルタイムで
一定時間周期で画面を更新することです。

プログラムのどこが悪いか、どこをどう修正すれば良いか、このライブラリを使えばできそう。
といったご指摘もらえると幸いです。

補足

特になし

コメントを投稿

0 コメント