Как установить метку Gtk.LinkButton в Glade или в коде после создания кнопки в Glade без ручного редактирования файла .glade?

У меня есть Gtk.LinkButton, и я хочу программно изменить его метку во время выполнения программы, которую я пишу. Я обнаружил, что могу изменить метку, вручную отредактировав файл .glade. Как я могу изменить это программно? Я использую Python 2.7.13 и GTK+ 3.22 в последней версии MSYS2 и последней версии Windows 10.

example.py:

# coding=utf-8

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

b = Gtk.Builder()
b.add_from_file("test.glade")

w = b.get_object("window1")
linkButton = b.get_object("linkButton")
linkButton.label = "Google"  # This does nothing.

w.connect("delete-event", Gtk.main_quit)
w.show_all()
Gtk.main()

test.glade:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkLinkButton" id="linkButton">
        <property name="label" translatable="yes">button</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="relief">none</property>
        <property name="uri">http://www.google.com</property>
      </object>
    </child>
  </object>
</interface>

Скриншот:

Скриншот


person silviubogan    schedule 22.08.2017    source источник


Ответы (1)


Поскольку Gtk.LinkButton родительским классом является Gtk.Button, вы можете использовать Gtk.Button set_label для установки метки кнопки:

...
w = b.get_object("window1")
linkButton = b.get_object("linkButton")
linkButton.set_label("Google")  # This does something
...

PS: свойства GObject инкапсулированы в <object>.props.<property>, поэтому, чтобы установить метку, используя тот же подход, что и в вопросе, нужно сделать:

linkButton.props.label = "Google"  # This also does something
person José Fonte    schedule 22.08.2017