pygtk cellrenderertoggle 未被选中
pygtk cellrenderertoggle is not checked
我有以下代码:
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 数据库获取数据并将其放入列表存储,
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
应显示已选中 toggle/checkbox 且 false
应未选中的列中显示。
不幸的是,这并没有发生。
复选框不需要处于活动状态(我不希望它能够切换),但通过单击树视图行,它会打开一个新的 window(相应地选中或不选中复选框)。据我所知,true/false
值包含在某处,但没有在视觉上显示。
谁能告诉我哪里错了?
我没有 post 整个程序,因为它太大而且可能会误导...
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 的字符串内部名称之一。
我有以下代码:
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 数据库获取数据并将其放入列表存储,
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
应显示已选中 toggle/checkbox 且 false
应未选中的列中显示。
不幸的是,这并没有发生。
复选框不需要处于活动状态(我不希望它能够切换),但通过单击树视图行,它会打开一个新的 window(相应地选中或不选中复选框)。据我所知,true/false
值包含在某处,但没有在视觉上显示。
谁能告诉我哪里错了?
我没有 post 整个程序,因为它太大而且可能会误导...
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 的字符串内部名称之一。