我有以下代码:
self.db='checks.db'
self.con = lite.connect(self.db)
self.cur = self.con.cursor()
self.q_oblig_initial='SELECT data_plirotees.rowid as rowid,recdate,bank,amount,dueto,gto,plirstatus FROM data_plirotees WHERE plirstatus=0 ORDER BY dueto ASC'
self.store_oblig = gtk.ListStore(int,str,str,str,str,str,bool)
self.cur.execute(q_oblig)
self.data_oblig=self.cur.fetchall()
for value in self.data_oblig:
if value[6]==0:
plir=False
elif value[6]==1:
plir=True
self.store_oblig.append([value[0],datetime.datetime.fromtimestamp(int(value[1])).strftime('%d/%m/%Y'),value[2],"%.2f" %(value[3]),datetime.datetime.fromtimestamp(int(value[4])).strftime('%d/%m/%Y'),value[5],plir])`
从sqlite数据库获取数据并将其放入liststore中,
rendererToggle.connect("toggled", self.on_cell_toggled)
column_toggle = gtk.TreeViewColumn("Καλύφθηκε", rendererToggle, active=1)
column_toggle.set_fixed_width(10)
treeView_oblig.append_column(column_toggle)
必须在true
应显示已选中的切换/复选框的列中显示,false
应显示未选中。
不幸的是,这不会发生。
复选框不需要处于活动状态(我不希望它能够切换),但是通过单击树视图行,它会打开一个新窗口(其中检查按钮是否相应)。据我所知,true/false
值包含在某处,但它没有在视觉上呈现。
有人能告诉我我错在哪里吗?
我没有发布整个节目,因为它太大了,也许是误导......
答案 0 :(得分:1)
self.store_oblig = gtk.ListStore(int,str,str,str,str,str,bool)
此行创建一个GtkListStore,其中每列的类型不同。列从左到右编号,从0开始:
self.store_oblig = gtk.ListStore(int,str,str,str,str,str,bool)
column number 0 1 2 3 4 5 6
使用以下方法创建GtkTreeViewColumn:
column_toggle = gtk.TreeViewColumn("Καλύφθηκε", rendererToggle, active=1)
这表示列的单元格渲染器应该从模型的第1列(在本例中为列表存储)中获取其active
属性的值。 active
属性需要bool
。
但如果您回顾上面的内容,第1列不是bool
,而是string
!所以你真正想要的是active=6
,而不是active=1
。 (另一方面,您添加到列表存储区的代码似乎是正确的。)
这就是警告Warning: unable to set property 'active' of type 'gboolean' from value of type 'gchararray' gtk.main()
试图告诉你的; gchararray
是(一个)GLib的字符串内部名称。