web-dev-qa-db-fra.com

Comment créer un bouton multi-style dans GTK3 Python

J'ai lu GTK3 Python et sa partie Button.

Eh bien, j'essaie de créer un bouton comme celui-ci (c'est le logiciel Klavaro): enter image description here

mais je n'ai rien trouvé sur les paramètres spéciaux de Button.

Alors, comment créer un bouton dans GTK3 Python comme l'image mentionnée?

2
mortezaipo

Un GtkButton dérive d'un GtkContainer et peut donc contenir n'importe quel autre widget. Utilisez simplement la méthode add() pour ajouter un widget GtkBox pour la mise en page et les étiquettes et une icône à l'intérieur.

Voici une récréation très rapide dans Glade, si vous ne pouvez pas le comprendre avec du code Python pur, je vous donnerai un exemple lorsque j'aurai plus de temps).

enter image description here

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.10"/>
  <object class="GtkButton" id="button1">
    <property name="visible">True</property>
    <property name="can_focus">True</property>
    <property name="receives_default">True</property>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="spacing">8</property>
        <child>
          <object class="GtkImage" id="image1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="icon_name">gtk-dialog-error</property>
            <property name="icon_size">6</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkBox" id="box2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="valign">center</property>
            <property name="orientation">vertical</property>
            <property name="spacing">4</property>
            <child>
              <object class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="xalign">0</property>
                <property name="label" translatable="yes">0 - Introduction</property>
                <attributes>
                  <attribute name="weight" value="bold"/>
                </attributes>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkLabel" id="label2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="xalign">0</property>
                <property name="label" translatable="yes">Learn how to type correctly</property>
                <property name="ellipsize">start</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>
2
Timo