gpt4 book ai didi

python - pygobject TreeView 在运行时加载并填充后显示为空

转载 作者:太空宇宙 更新时间:2023-11-03 17:49:59 25 4
gpt4 key购买 nike

这是我在阅读了很长时间有用的答案后第一次需要在这里发帖。

在这个问题中,我使用python3pygobject。我刚刚开始学习 pygobject。

我的程序由一个包含按钮的堆栈组成。当按下按钮时,我创建一个列表存储和一个 TreeView ,然后将其添加到堆栈中并使其可见。

  • 期望当我按下按钮时,我会看到 TreeView
  • 发生的情况是当我按下按钮时,界面没有发生任何变化
  • 当我再次按下按钮时,堆栈将更改为 TreeView 。 这件事从一开始就应该发生

我在 Windows 和 Linux 中都见过这种行为。

这是我的代码:

from gi.repository import Gtk

#list of tuples for each software, containing the software name, initial release, and main programming languages used
software_list = []

class TreeViewFilterWindow(Gtk.Window):

def __init__(self):
#init window
Gtk.Window.__init__(self, title="Treeview Filter Demo")
self.resize (500, 500)

#create stack
self.stack = Gtk.Stack()
self.add (self.stack)

#create button. when pressed, it will create tree view and show it
#add button to stack
button = Gtk.Button (label='create tree')
button.connect ('clicked', self.create_tree)
self.stack.add (button)

#init tree view to none
#button is pressed while there is a treeview, no need to create it. just make it visible
self.treeview = None


def create_tree (self, widget):
#if tree view is none, create it
if not self.treeview:
#Creating the ListStore model
self.software_liststore = Gtk.ListStore(str, int)

#creating the treeview
self.treeview = Gtk.TreeView(self.software_liststore)

#adding two columns
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn('software', renderer, text=0)
self.treeview.append_column(column)
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn('release year', renderer, text=1)
self.treeview.append_column(column)

#add to stack
self.stack.add(self.treeview)

#append 1 column
self.software_liststore.append (('pitivi', 2005))

#set visible
self.stack.set_visible_child (self.treeview)

#if show_all is not called, the tree view is never shown
self.stack.show_all()


win = TreeViewFilterWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

我错过了什么?这是一个错误吗?每次添加新小部件时我都需要调用 show_all 吗?

谢谢

最佳答案

创建 TreeView 后,例如在调用 self.software_liststore.append 之后,您会错过对 self.treeview.show_all() 的调用(但仍然在 if 内)。您可以删除对 self.stack.show_all() 的调用,因为堆栈已经显示,这是通过调用顶部的 win.show_all() 来确保的-级别。

为什么您对 self.stack.show_all() 的调用不包含已添加到堆栈中的 TreeView ,这一点并不明显。如果将 Gtk.Stack 更改为 Gtk.HBox 并将 add() 更改为 pack_start(),则不再需要在 TreeView 上显式调用 show_all。这不适用于 GtkStack 可能是 GTK 错误,或者是 set_visible_child 实现的转换异步性质的结果。

关于python - pygobject TreeView 在运行时加载并填充后显示为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29250342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com