我正在开发一个基于PyGobject的演示程序,它的界面部分就像库存管理一样,应该每隔几秒刷新一次。该程序需要能够在保持显示信息正确的同时全天候运行。
我有一个容器,其内容在堆栈中(并且在它们之间有单独的标签可以更改):
def main_content(self):
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.stack = Gtk.Stack()
self.stack.get_style_context().add_class("main-container")
self.stack.props.margin = 20
self.child1_child = self.child1()
self.child1_child.set_visible(True)
self.stack.add_named(self.child1_child, "Child1")
self.child2_child = self.child2()
self.child2_child.set_visible(True)
self.stack.add_named(self.child2_child, "Child2")
self.child3_child = self.child2()
self.child3_child.set_visible(True)
self.stack.add_named(self.child3_child, "Child3")
box.pack_start(self.stack, True, True, 0)
if self.redraw:
print("Redrawing")
self.redraw = True
return box
因此,有一些函数可以生成每个堆栈成员,它们被分配给变量,然后设置为可见并添加到堆栈中。
让我们假设堆栈Child1有一个股票列表,我不希望它有超过5分钟的延迟。我尝试进行重绘功能,其中列表正在制作选项卡,此重绘功能由 timeout_add 或标签点击引发:
def redraw(self):
selected_stack = self.listbox.get_selected_row().get_index()
# **Possible** solution:
stack_elements = {0: "Child1", 1: "Child2", 2: "Child3"}
variables = {0: "child1_child", 1: "child2_child", 2: "stock_child"}
self.variables[janela].destroy()
self.variables[janela] = self.stack_elements[janela].lower()
self.variables[janela].set_visible(True)
self.stack.add_named(self.variables[janela], stack_elements[janela])
# Problems: Doesn't works as python code. Just an idea
# **Possible** solution 2:
self.stack.destroy()
self.stack = Gtk.Stack()
self.stack_content = self.main_content()
self.main_box.pack_start(self.stack_content, True, True, 0)
这些只是一些尝试错误的想法,我从来没有建立一个需要不断更新的界面,是否有任何正确的方法,或者一种方式让我的方式之一工作?