[从Gtk.ComboBox创建类和继承时如何显示选项

问题描述 投票:0回答:1

我将类命名为Combo,并从Gtk.ComboBox中的GtkClass.py继承:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class Combo(Gtk.ComboBox):

    def __init__(self,opt):
        Gtk.ComboBox.__init__(self)
        self.options = opt
        self.set()

    def set(self):
        self.id_kitchen_list = Gtk.ListStore(str)
        for item in self.options:
            self.id_kitchen_list.append([item])

        self.id_kit_combobox = Gtk.ComboBox.new_with_model(self.id_kitchen_list)
        renderer_text = Gtk.CellRendererText()
        self.id_kit_combobox.pack_start(renderer_text, True)
        self.id_kit_combobox.add_attribute(renderer_text, "text", 0)
        return self.id_kit_combobox

当我在main.py文件中使用此类时:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

from GtkClass import Combo
class Assistant(Gtk.Assistant):
    def __init__(self):
        Gtk.Assistant.__init__(self)
        self.set_title("Assistant")
        self.set_default_size(600, -1)

        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.append_page(box)
        self.set_page_type(box, Gtk.AssistantPageType.INTRO)
        self.set_page_title(box, "Page 1: Kitchen")

        grid = Gtk.Grid()
        grid.set_row_spacing(10)
        grid.set_column_spacing(10)

        self.id_kit_combobox = Combo(["1", "2", "3", "4", "5"])
        grid.attach(self.id_kit_combobox, 1, 0, 1, 1)

        box.pack_start(grid, True, True, 0)
        self.set_page_complete(box, True)

assistant = Assistant()
assistant.show_all()

Gtk.main()

ComboBox创建但单击时未显示任何选项!

enter image description hereenter image description here

python combobox gtk gtk3
1个回答
0
投票

问题class inheritance中的Gtk.ComboBox

首先,我想说明您的实现有什么问题。

class Combo(Gtk.ComboBox):

    def __init__(self,opt):
  1. [您在这里__init__inherietedGtk.ComboBox,但您没有通过model=。因此,您会得到一个带有默认型号的ComboBox
        Gtk.ComboBox.__init__(self)
        ...
    
  2. [此处,您要实例化要使用的ListStore,但不要将此.set...实例化为ListStore类型的所有已实例化的self对象。因此,附加选项永远不会显示。
    Gtk.ComboBox
  3. 在这里,您实例化类型为def set(self): self.id_kitchen_list = Gtk.ListStore(str) for item in self.options: self.id_kitchen_list.append([item]) new对象,该对象在Gtk.ComboBox中指向ComboBox。内部ComboBox将永远不会显示。
    ComboBox
  4. 这里,您返回一个从调用 self.id_kit_combobox = Gtk.ComboBox.new_with_model(self.id_kitchen_list) ... 开始从未使用过的对象。
    self.set()

解决方案

    return self.id_kit_combobox
© www.soinside.com 2019 - 2024. All rights reserved.