如何在 Python 3 中以指定的时间间隔最好地使用 reload/refresh GTK table 数据和 UI?
How to best reload/refresh GTK table data & UI at specified intervals in Python 3?
我用 GTK/Python3 构建了一个小应用程序,目前运行良好。我是 Python 的新手,所以请原谅所提供代码片段中的任何不足 syntax/formatting/logic。
启动时,main()
会调用位于名为 table.py
的单独文件中的两个函数。这些函数负责从预先确定的字符串数组 (create_column_headers()
) 创建 table 列 headers,另一个负责从 API 创建 table 行值回应 (create_row_values
)
我正在寻找 best/correct 方法来每隔 x 秒更新在 create_row_values
中创建的 table/data,以便 table UI使用最新的 API 响应值更新。
main.py
import gi
import table
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MainWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Crypto Widget")
table.create_column_headers(self)
table.create_row_values(self)
win = MainWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
table.py
import gi
import cmc_api
import const
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
def create_row_values(self):
for i, d in enumerate(cmc_api.get_data()['data']):
self.list_store.append([
f"{d['name']}",
f"{d['symbol']}",
"${:,.4f}".format(d['quote']['USD']['price']),
f"{round(d['quote']['USD']['percent_change_24h'], 2)}",
f"{round(d['quote']['USD']['percent_change_7d'], 2)}",
"${:,.2f}".format(d['quote']['USD']['market_cap']),
"${:,.2f}".format(d['quote']['USD']['volume_24h']),
"{:,.2f}".format(d['circulating_supply'])
])
def create_column_headers(self):
self.list_store = Gtk.ListStore(str, str, str, str, str, str, str, str)
tree_view = Gtk.TreeView(model=self.list_store)
[tree_view.append_column(Gtk.TreeViewColumn(c, Gtk.CellRendererText(), text=i))
for i, c in enumerate(const.column_headers)]
self.add(tree_view)
重申问题:如何让 table 的行值每 x 秒更新一次 - 从而用 [=46] 结果的最新值更新 UI =]打电话?
如果您有任何建议或可以指出正确的方向,请告诉我!
您可以使用 API 例如 GLib.timeout_add_seconds()
.
在提供的回调中,您可以获取最新结果并更新列表存储。只要你以return True
结尾,回调会在x秒后再次调用。
我用 GTK/Python3 构建了一个小应用程序,目前运行良好。我是 Python 的新手,所以请原谅所提供代码片段中的任何不足 syntax/formatting/logic。
启动时,main()
会调用位于名为 table.py
的单独文件中的两个函数。这些函数负责从预先确定的字符串数组 (create_column_headers()
) 创建 table 列 headers,另一个负责从 API 创建 table 行值回应 (create_row_values
)
我正在寻找 best/correct 方法来每隔 x 秒更新在 create_row_values
中创建的 table/data,以便 table UI使用最新的 API 响应值更新。
main.py
import gi
import table
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MainWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Crypto Widget")
table.create_column_headers(self)
table.create_row_values(self)
win = MainWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
table.py
import gi
import cmc_api
import const
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
def create_row_values(self):
for i, d in enumerate(cmc_api.get_data()['data']):
self.list_store.append([
f"{d['name']}",
f"{d['symbol']}",
"${:,.4f}".format(d['quote']['USD']['price']),
f"{round(d['quote']['USD']['percent_change_24h'], 2)}",
f"{round(d['quote']['USD']['percent_change_7d'], 2)}",
"${:,.2f}".format(d['quote']['USD']['market_cap']),
"${:,.2f}".format(d['quote']['USD']['volume_24h']),
"{:,.2f}".format(d['circulating_supply'])
])
def create_column_headers(self):
self.list_store = Gtk.ListStore(str, str, str, str, str, str, str, str)
tree_view = Gtk.TreeView(model=self.list_store)
[tree_view.append_column(Gtk.TreeViewColumn(c, Gtk.CellRendererText(), text=i))
for i, c in enumerate(const.column_headers)]
self.add(tree_view)
重申问题:如何让 table 的行值每 x 秒更新一次 - 从而用 [=46] 结果的最新值更新 UI =]打电话?
如果您有任何建议或可以指出正确的方向,请告诉我!
您可以使用 API 例如 GLib.timeout_add_seconds()
.
在提供的回调中,您可以获取最新结果并更新列表存储。只要你以return True
结尾,回调会在x秒后再次调用。