You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:37:27