如何在创建 class 和从 Gtk.ComboBox 继承时显示选项
how to shows options when create class and inheritance from Gtk.ComboBox
我在 GtkClass.py
中将 class 命名为 Combo
并从 Gtk.ComboBox
继承:
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
文件中使用此 class 时:
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
创建但单击时没有显示任何选项!
Question: class inheritance
from Gtk.ComboBox
首先,我想说明一下你的实现有什么问题。
class Combo(Gtk.ComboBox):
def __init__(self,opt):
- 这里你
__init__
inherieted
Gtk.ComboBox
,但是你没有通过你的model=
。因此,您会得到一个带有默认模型的 ComboBox
。
Gtk.ComboBox.__init__(self)
...
- 在这里,你实例化了你想要使用的
ListStore
,但是你没有 .set...
这个 ListStore
到已经实例化的 self
类型的对象Gtk.ComboBox
.
因此,附加选项永远不会出现。
def set(self):
self.id_kitchen_list = Gtk.ListStore(str)
for item in self.options:
self.id_kitchen_list.append([item])
- 在这里,您实例化了一个类型为
Gtk.ComboBox
的 new 对象,它导致 ComboBox
in ComboBox
。这个内在的ComboBox
永远不会出现。
self.id_kit_combobox = Gtk.ComboBox.new_with_model(self.id_kitchen_list)
...
- 在这里,您 return 一个从未在调用
self.set()
中使用过的对象。
return self.id_kit_combobox
Solution:
class Combo(Gtk.ComboBox):
def __init__(self, opt):
self.id_kitchen_list = Gtk.ListStore(str)
Gtk.ComboBox.__init__(self, model=self.id_kitchen_list)
for item in opt:
self.id_kitchen_list.append([item])
renderer_text = Gtk.CellRendererText()
self.pack_start(renderer_text, True)
self.add_attribute(renderer_text, "text", 0)
我在 GtkClass.py
中将 class 命名为 Combo
并从 Gtk.ComboBox
继承:
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
文件中使用此 class 时:
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
创建但单击时没有显示任何选项!
Question:
class inheritance
fromGtk.ComboBox
首先,我想说明一下你的实现有什么问题。
class Combo(Gtk.ComboBox):
def __init__(self,opt):
- 这里你
__init__
inherieted
Gtk.ComboBox
,但是你没有通过你的model=
。因此,您会得到一个带有默认模型的ComboBox
。Gtk.ComboBox.__init__(self) ...
- 在这里,你实例化了你想要使用的
ListStore
,但是你没有.set...
这个ListStore
到已经实例化的self
类型的对象Gtk.ComboBox
.
因此,附加选项永远不会出现。def set(self): self.id_kitchen_list = Gtk.ListStore(str) for item in self.options: self.id_kitchen_list.append([item])
- 在这里,您实例化了一个类型为
Gtk.ComboBox
的 new 对象,它导致ComboBox
inComboBox
。这个内在的ComboBox
永远不会出现。self.id_kit_combobox = Gtk.ComboBox.new_with_model(self.id_kitchen_list) ...
- 在这里,您 return 一个从未在调用
self.set()
中使用过的对象。return self.id_kit_combobox
Solution:
class Combo(Gtk.ComboBox):
def __init__(self, opt):
self.id_kitchen_list = Gtk.ListStore(str)
Gtk.ComboBox.__init__(self, model=self.id_kitchen_list)
for item in opt:
self.id_kitchen_list.append([item])
renderer_text = Gtk.CellRendererText()
self.pack_start(renderer_text, True)
self.add_attribute(renderer_text, "text", 0)