使用PyGObject组合框显示不带条目的下拉列表

2024-04-23 16:03:59 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我有一个列表(fooId,fooName),我需要显示一个下拉列表,其中只显示这个列表中的fooName。但是,当我需要从用户那里获取所选项目时,我只想获取fooId,而不是fooName。在

根据文件,我目前正在做的是:

someFoo = model.getSomeFoo()
foo_list = Gtk.ListStore(int, str)
for foo in someFoo:
    foo_list.append([foo[0], foor[1]])
self.cb = Gtk.ComboBox.new_with_model_and_entry(foo_list)
self.cb.set_entry_text_column(1)

正如您可以想象的那样,除了组合框显示带有下拉列表的条目之外,这些行都做得很好。我不需要这个条目,所以我尝试使用:

^{pr2}$

但现在我的下拉列表是空的。在

有什么想法吗?在


Tags: 文件项目用户selfgtk列表modelfoo
1条回答
网友
1楼 · 发布于 2024-04-23 16:03:59

我理解你的问题。您需要创建如下所示的CellRenderText:

#-*- coding: UTF-8 -*-
from gi.repository import Gtk

class App(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title='ComboBox Test')

        model = Gtk.ListStore(int, str)
        for i in [[1, 'One'], [2, 'Two'], [3, 'Three'], [4, 'Four']]:
            model.append(i)

        combo = Gtk.ComboBox.new_with_model(model)
        renderer = Gtk.CellRendererText()

        combo.set_active(0)
        combo.pack_start(renderer, True)
        combo.add_attribute(renderer, 'text', 1)
        combo.connect('changed', self._changed_cb)

        self.add(combo)

        # Variables
        self.combo = combo
        self.model = model

    def _changed_cb(self, widget, param=None):
        comboiter = self.combo.get_active_iter()
        if comboiter:
            print("Changed to {}".format(
                     self.model.get_value(comboiter, 0)
            ))
        else:
            print("Nothing selected!")

win = App()
win.connect('delete-event', Gtk.main_quit)
win.show_all()
Gtk.main()

当您使用条目创建一个组合框时,组合框将假定您的模型具有呈现器配置,因为它假定您将获得一个字符串,它可以是用户输入的或用户选定的,但最后您将关心该字符串,因此,您的模型将是“平面”的,只有一列。大多数时候都是这样,一个例外是当你使用条目来执行自动搜索时,但是有一个特殊的设置,特殊的关联对象,并且更高级。在

如果要创建一个组合框,而不创建条目,则需要定义模型和演示之间的匹配。为此,有几种类型的渲染器:CellRendererPixbuf、CellRenderText,gtk.cellRenderToggle、CellRenderSpinner等

每个渲染器都有一组属性,可以与模型中的列相匹配。在上面的示例中,我将一个cellRenderText对象放在组合框中,它的“text”属性(显示在下拉列表中的属性)映射到模型列1。在

以下是相同的示例,但使用了更多属性,在本例中,文本的颜色:

^{pr2}$

相关问题 更多 >