python - 迁移到 pygobject、glade 和 gtk3 时使用入口组合框

标签 python combobox glade gtk3 pygobject

我在 python 中使用 glade 和 pygtk 开发了 3 个月,但甚至在我有时间适应它之前,它就已经过时了。

使用 Archlinux,我的系统一直是最新的,所以我不得不使用 gtk3,即使我发现它与 gtk2 相比有点缺乏功能。

所以我决定改用pygobject。不幸的是,文档并不完整。

我成功地将我的 glade 文件和我的 python 代码升级到新系统,但仍然存在一个错误。

在我的一个程序中,我有一个带有条目的组合框。 我使用调用方法 get_active_text() 来获取条目的内容,无论它是从组合框中选择的还是由用户输入的。

这个方法不再存在(我想,因为它给了我一个错误)所以我改用这个:

def get_license(self):
    #return self.combobox_license.get_active_text()
    tree_iter = self.combobox_license.get_active_iter()
    if tree_iter != None:
        model = self.combobox_license.get_model()
        return model[tree_iter][0]
    else:
        entry = self.combobox_license.get_child()
        return entry.get_text()

如您所见,旧代码已被注释。

此代码有效,但我有一个奇怪的问题: 我无法使用条目!

我可以从组合框中选择文本,但该条目不可用。我可以选择,但我不能输入。

这是我需要在某处激活的新行为吗? 使用 gtk2 版本的程序,我没有任何问题。

这是我的 glade 文件中描述组合框条目的部分:

  <object class="GtkComboBox" id="combobox_license">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="model">liststore_license</property>
    <property name="has_entry">True</property>
    <property name="entry_text_column">0</property>
    <signal name="changed" handler="on_combobox_license_changed" swapped="no"/>
    <child>
      <object class="GtkCellRendererText" id="cellrenderertext_license"/>
    </child>
    <child internal-child="entry">
      <object class="GtkEntry" id="combobox-entry2">
        <property name="can_focus">False</property>
        <property name="buffer">entrybuffer1</property>
      </object>
    </child>
  </object>

我创建了一个列表存储,其中一列类型为 gchararray,其中包含文本。 单元格由 GtkCellRenderer 渲染(但未定义 cellrenderer 的属性“文本”,因为如果我将其定义为 0(gchararray),我将得到文本两次!)

我认为添加一个 entrybuffer 会有所帮助,但它不会改变任何东西。

编辑:我找到了解决方案:嵌入式条目的 can_focus 为假。 现在它可以工作了,不需要入口缓冲区。

我在发布之前找到了解决方案,但我发布它以防其他用户也遇到此问题。

最佳答案

将组合框的嵌入条目的 can_focus 属性更改为 true。

关于python - 迁移到 pygobject、glade 和 gtk3 时使用入口组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656239/

相关文章:

python - 在 Python 中追加列表的说明和首选方法

python - 如何根据该地区的人口密度计算 map 搜索的动态默认半径?

c# - 带有自定义项模板文本的 wpf 组合框

widget - 在 GTK+ 的 .gui 文件中制作已知的子类小部件

python - 更改由 glade 设置的 Gtk 加速器

c - 如何修复 "Gtk-WARNING ** Content added to the action area of a dialog using header bars"

python - 来自服务器的用户未与 smtp.gmail.com 通信

python - 读取 .txt 文件中的数据(不包括页眉和页脚)

javascript - jQuery UI 组合框清除选择事件

java - 如何使用队列元素填充组合框?