未检查pygtk cellrenderertoggle

时间:2015-02-05 13:05:56

标签: python user-interface gtk toggle pygtk

我有以下代码:

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值包含在某处,但它没有在视觉上呈现。

有人能告诉我我错在哪里吗?

我没有发布整个节目,因为它太大了,也许是误导......

1 个答案:

答案 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的字符串内部名称。