GTK/Python에서 노드가있는 인터페이스를 만들려고합니다.GTK 1 Liststore에 3 개의 다른 필터를 만드는 방법
내가 하나 liststore을 만들고 내가 다른 일을 필터링 할 수 있습니다. 사용자는 두 가지 작업을 수행해야합니다. 먼저 노드 유형, 노드의 시작 이름 등으로 필터링하려는 경우 사용할 필터 유형을 콤보 상자에서 선택해야합니다.
그런 다음 텍스트 항목에서 그는보고 싶은 정보를 결정합니다. 노드 유형의 예제를 가져옵니다. 3 가지 유형의 노드, 노드 유형 1, 노드 유형 2 및 노드 유형 3이 있습니다. 사용자로서 노드 유형 1 만보고 싶기 때문에 노드 항목에 1을 씁니다. 실제로 문제가 있습니다. 필터가 작동하지 않습니다.
처음 2 liststores을 만듭니다
내 3 개 가지 필터가 있습니다def create_liststore(self):
if len(self.FdessinCarto.pos) != 0:
for i,node in enumerate(self.FdessinCarto.pos):
self.node_liststore.append([str(node.title),self.controller.model.string_from_numdate(int(node.start_time)),self.controller.model.string_from_numdate(int(node.end_time)),str(node.node_group),str(node.description),str(node.attachment_list)])
self.edgelist = self.controller.get_edge_list()
if len(self.edgelist) !=0:
for i in self.edgelist:
edge_prop=self.controller.edge_data(i[0],i[1])
self.edge_liststore.append([edge_prop['label'],str(i[0].title),str(i[1].title),edge_prop['description'],edge_prop['attachment_list']])
#creating the treeview for Node, making it use the filter as a model, and adding the columns
self.treeviewNode = Gtk.TreeView.new_with_model(self.node_liststore)
for i, column_title in enumerate(["Name", "Beginning date", "End date", "Type of node", "Description of node","files"]):
self.Noderenderer = Gtk.CellRendererText()
self.Noderenderer.set_property("editable", True)
column = Gtk.TreeViewColumn(column_title, self.Noderenderer, text=i)
column.set_sort_column_id(0)
self.treeviewNode.append_column(column)
#creating the treeview for edge
self.treeviewEdge = Gtk.TreeView.new_with_model(self.edge_liststore)
for i, column_title in enumerate(["Name", "Node 1", "Node 2", "Description of edge","file"]):
self.Edgerenderer = Gtk.CellRendererText()
self.Edgerenderer.set_property("editable", True)
column = Gtk.TreeViewColumn(column_title, self.Edgerenderer, text=i)
column.set_sort_column_id(0)
self.treeviewEdge.append_column(column)
self.SWViewListStore.add(self.treeviewNode)
self.SWEdgeStore.add(self.treeviewEdge)
self.SWViewListStore.show_all()
self.SWEdgeStore.show_all()
: 내 콤보 박스를 변경하면
#creating the filtre
self.node_beginning_date_filter = self.node_liststore.filter_new()
self.node_end_date_filter = self.node_liststore.filter_new()
self.node_type_filter = self.node_liststore.filter_new()
#setting the filter function, note that we're not using the
self.node_end_date_filter.set_visible_func(self.node_end_date_filter_func)
self.node_beginning_date_filter.set_visible_func(self.node_beginning_date_filter_func)
self.node_type_filter.set_visible_func(self.node_type_filter_func)
, 내 기능을 활성화 것, 그것의 유형을했다 combofilter 다음 콤보 상자의 텍스트 :
def on_entryComboBox_changed(self,widget):
textComboFilter = self.View.combo_filter.get_active_text()
print("textComboFilter %s" %textComboFilter)
if textComboFilter == "Filter by node's beginning date":
#print("%s language selected!" % textComboFilter)
self.View.current_filter = textComboFilter
self.View.node_beginning_date_filter.refilter()
if textComboFilter == "Filter by node's end date":
#print("%s language selected!" % textComboFilter)
self.View.current_filter = textComboFilter
self.View.node_end_date_filter.refilter()
if textComboFilter == "Filter by type of node":
#print("%s language selected!" % textComboFilter)
self.View.current_filter = textComboFilter
self.View.node_type_filter.refilter()
그리고 작동하지 않습니다.
귀하의 질문은 우리가 무엇을하고 있는지 모르는 곳없는 많은 코드가 있기 때문에 지금 당장 대답하기가 어렵습니다. 예를 들어,'self.View' 유형이 무엇이고'current_filter' 속성이 무엇인지 모릅니다. 문제를 보여주는 짧은 예제를 만들 수 있습니까? 그게 당신이 직접 솔루션을 때리는 데 도움이 될 수도 있습니다 ... – ptomato
고맙습니다. –
마지막으로, 약간의 예제를 작성했기 때문에 문제를 파악할 수있었습니다. 3보다는 1 필터를 작성해야합니다. int 대신 int로 입력해야합니다. –