2015-02-05 1 views
0

나는 다음과 같은 코드가 있습니다pygtk의 cellrenderertoggle은 선택하지

SQLite는 데이터베이스에서 데이터를 가져오고 liststore에 넣 및
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])` 

있다

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 값이 어딘가에 포함되어 있지만 시각적으로 표시되지 않는다는 것을 이해합니다.

누군가 내가 잘못된 위치를 표시 할 수 있습니까? 각 열은 다른 유형의이다

이 너무 크고 아마도 misguiding 것이 원인 내가 전체 프로그램 '을 게시하지 않았다 ...

+0

추가 정보 경고 : 'gchararray'유형의 값에서 '경고 : 유형'gboolean '을 (를) 설정할 수 없습니다. gtk.main()' – Filippos

+0

1) self.store_oblig'? 2) 전체 프로그램을 게시 할 필요는 없습니다. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)이면 충분합니다. 3) Markdown에 코드 블록을 만들려면 각 줄 앞에 4 개의 공백을 붙이십시오. '어디서나 사용할 필요가 없습니다. 이것은 인라인 코드를위한 것입니다. – andlabs

+0

더 읽기 쉬운 방식으로 질문을 편집했습니다 ... – Filippos

답변

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) 

을이 컬럼의 셀 렌더링이 active과 속성 값을 얻을해야한다고 말한다 모델의 1 열 (이 경우 목록 저장소). 그리고 active 속성에는 bool이 필요합니다.

하지만 위에서 살펴본 경우 1 열은 bool이 아니고 string! 그래서 당신이 정말로 원했던 것은 이 아니고 active=1이 아닙니다. (목록 스토어에 추가 할 코드가 다른 것 같습니다.)

경고 Warning: unable to set property 'active' of type 'gboolean' from value of type 'gchararray' gtk.main()이 알려주려는 내용입니다. gchararray은 문자열에 대한 GLib의 내부 이름 중 하나입니다.

+0

그게 간단했습니다! 참조에 없었던 것이 너무 나쁘다 ... 많은 감사합니다! – Filippos

+0

예. GtkTreeView는 GObject와 GTK +를 한꺼번에 이해해야하기 때문에 조금 이상합니다. 이 경우 걸림돌은 속성이 데이터 저장소의 열에 매핑되는 방식입니다. 그러나 상황이 마침내 실현되는 순간, 앞으로 GtkTreeView에서 작업하게됩니다. * 훨씬 더 좋게 = P – andlabs

관련 문제