我是python的新手,我放了一个按钮来刷新listview并从.txt文件中获取信息,但它不起作用:(
以下是代码:
import gtk
actresses = [i.strip().replace("'", "").split() for i in open("lista.txt").readlines()]
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_size_request(350, 250)
self.set_position(gtk.WIN_POS_CENTER)
self.connect("destroy", gtk.main_quit)
self.set_title("ListView")
self.Boton = gtk.Button("click")
self.Boton.connect("clicked",self.create_list)
self.Boton.show()
vbox = gtk.VBox(False, 8)
sw = gtk.ScrolledWindow()
sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
vbox.pack_start(sw, True, True, 0)
vbox.pack_start(self.Boton, True, True, 0)
store = self.create_model()
treeView = gtk.TreeView(store)
treeView.connect("row-activated", self.on_activated)
treeView.set_rules_hint(True)
sw.add(treeView)
self.create_columns(treeView)
self.statusbar = gtk.Statusbar()
vbox.pack_start(self.statusbar, False, False, 0)
self.add(vbox)
self.show_all()
def create_model(self):
store = gtk.ListStore(str, str, str)
for act in actresses:
store.append([act[0], act[1], act[2]])
return store
def create_columns(self, treeView):
rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Nombre", rendererText, text=0)
column.set_sort_column_id(0)
treeView.append_column(column)
rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("apellido", rendererText, text=1)
column.set_sort_column_id(1)
treeView.append_column(column)
rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Tamaño", rendererText, text=2)
column.set_sort_column_id(2)
treeView.append_column(column)
def on_activated(self, widget, row, col):
model = widget.get_model()
text = model[row][0] + ", " + model[row][1] + ", " + model[row][2]
self.statusbar.push(0, text)
if model[row][0] == "lol":
print "Funciona"
def create_list(self, widget):
# create a TreeView object which will work with our model (ListStore)
self.listview = self.create_model()
self.treeView = gtk.TreeView(self.listview)
self.treeView.set_rules_hint(True)
PyApp()
gtk.main()
答案 0 :(得分:0)
您的代码有几个问题。
首先,由create_model
调用的create_list
方法不会重新读取文件,而是使用在顶层初始化的对象。要解决此问题,请create_model
调用阅读代码。
更重要的是,create_list
方法正在创建一个新的树视图,但是没有对它做任何事情(除了将它存储到Python实例的属性之外)。就GTK窗口而言,您的旧树视图仍在窗口中。有几种方法可以解决这个问题:
作为快速修复,您可以从VBox中删除现有树视图,添加新视图并显示它。更简单的版本是将创建vbox的代码移动到单独的方法,使用self.remove(self.get_child())
删除vbox并重新添加。其中任何一个都将完成代码的设定目标。
更好的解决方法是仅使用set_model
方法重新创建商店并将树视图切换到新商店。
另一种可能性是清空现有商店并重新填充它。树视图将对商店的更改做出反应,无需调用set_model
,也无需调用树视图。