Python 3.x Python Gtk.cellRenderText()颜色

Python 3.x Python Gtk.cellRenderText()颜色,python-3.x,gtk3,renderer,listcellrenderer,cellrenderer,Python 3.x,Gtk3,Renderer,Listcellrenderer,Cellrenderer,这个树视图有5列,其中列出了usb设备的详细信息,它显示了设备名称、型号、序列号和状态,列表上显示的都很好,我试图实现的是对“状态”进行颜色编码 仅列,如果“状态”为读写,则颜色编码为红色,否则为绿色。下面的代码是当前整个列的颜色代码为红色,它只是忽略了任何只读设备。我花了几个小时在网上找到答案,但什么都找不到。有人能帮我吗 def build_device_list(self): self.dev_store_len = len(self.device_list_store)

这个树视图有5列,其中列出了usb设备的详细信息,它显示了设备名称、型号、序列号和状态,列表上显示的都很好,我试图实现的是对“状态”进行颜色编码 仅列,如果“状态”为读写,则颜色编码为红色,否则为绿色。下面的代码是当前整个列的颜色代码为红色,它只是忽略了任何只读设备。我花了几个小时在网上找到答案,但什么都找不到。有人能帮我吗

def build_device_list(self):
    self.dev_store_len = len(self.device_list_store)
    for i, column_title in enumerate(["Device", "Model", "Serial Number","Size"]):
        self.renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn(column_title, self.renderer, text=i)
        self.device_list_treeview.append_column(column)
        column.set_sort_column_id(i)
    self.renderer_status = gtk.CellRendererText()
    column_status = gtk.TreeViewColumn("Status",self.renderer_status, text=4)
    for x in range(0, self.dev_store_len):
        if self.device_list_store[x][4] == "READ-WRITE":
           self.renderer_status.set_property("foreground", "Red")
           self.device_list_treeview.append_column(column_status)
        else:
           self.renderer_status.set_property("foreground", "Green")
           self.device_list_treeview.append_column(column_status)

    self.scrollable_treelist = gtk.ScrolledWindow()
    self.scrollable_treelist.set_vexpand(True)
    self.outter_box.pack_start(self.scrollable_treelist,False,True,0)
    self.scrollable_treelist.add(self.device_list_treeview)

对于任何关注此问题的人,以下是工作代码:

def build_device_list(self):
    self.dev_store_len = len(self.device_list_store)
    for i, column_title in enumerate(["Device", "Model", "Serial Number","Size"]):
        self.renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn(column_title, self.renderer, text=i)
        self.device_list_treeview.append_column(column)
        column.set_sort_column_id(i)
    self.renderer_status = gtk.CellRendererText()
    column_status = gtk.TreeViewColumn("Status",self.renderer_status, text=4, foreground=5)
    self.device_list_treeview.append_column(column_status)
    for x in range(0, self.dev_store_len):
        if self.device_list_store[x][4] == "READ-WRITE":
           self.device_list_store[x][5] = "Red"                
        else:
           self.device_list_store[x][5] = "Green" 
    self.scrollable_treelist = gtk.ScrolledWindow()
    self.scrollable_treelist.set_vexpand(True)
    self.outter_box.pack_start(self.scrollable_treelist,False,True,0)
    self.scrollable_treelist.add(self.device_list_treeview)

基本上,您需要一个隐藏的liststore列,它用您的颜色保存字符串值。然后treeview列需要将前台属性设置为该隐藏列。

self.device\u list\u treeview.append\u列(列状态)**?我不太确定,我没有注意到有两个星号。我已经把它们从里面移除了。这解决了你的问题吗?不,它不能解决问题。你有一个解决方案吗?