继承Gtk.ComboBox的Combo类点击无选项显示问题求助
问题分析与解决方案
你的问题根源在于Combo类的实现逻辑错误——你继承了Gtk.ComboBox,但却在set方法里重新创建了一个全新的Gtk.ComboBox实例,完全没有对当前类的实例(self)进行配置。这就导致你添加到界面的是一个未配置模型的空下拉框,而真正配置好选项的那个下拉框根本没被使用。
修复后的GtkClass.py代码
import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class Combo(Gtk.ComboBox): def __init__(self, opt): super().__init__() # 使用super()更简洁地调用父类构造函数 self.options = opt self.set() def set(self): # 创建存储选项的ListStore list_store = Gtk.ListStore(str) for item in self.options: list_store.append([item]) # 将模型绑定到当前ComboBox实例(self) self.set_model(list_store) # 添加文本渲染器并绑定属性到模型的第一列 renderer_text = Gtk.CellRendererText() self.pack_start(renderer_text, True) self.add_attribute(renderer_text, "text", 0)
关键修改点说明
- 移除了创建新
Gtk.ComboBox的代码,直接在当前类实例(self)上进行配置——毕竟你的类本身就是Gtk.ComboBox的子类,不需要再额外创建一个新的 - 使用
self.set_model()将ListStore绑定到当前下拉框,而不是绑定到新创建的对象 - 直接给
self添加CellRendererText并绑定文本属性,确保当前实例能正确显示选项 - 不需要返回任何对象,因为我们已经把当前实例配置完成了
验证效果
保持main.py的代码不变,运行后点击下拉框就能看到["1", "2", "3", "4", "5"]这些选项了。
内容的提问来源于stack exchange,提问作者CC7052
相关产品推荐
相关产品推荐

