Найти - Пользователи
Полная версия: Как освоить Glade-3 (Gtk-3)?
Начало » GUI » Как освоить Glade-3 (Gtk-3)?
1
Sprouttie
Не могу найти ресурсов с толковым объяснением как работать в Glade-3.18 в связке с Python-3. Может кинет кто простейший примерчик с формой где по нажатию кнопки будет выводиться текст в одно из окон формы, а в другое окно с другой кнопки - изображение?

Есть программа, но опять же на gtk без создания формы в Glade , которая при нажатии меняет имя кнопки.
Я попробовал такой вариант: В Glade создал окно, положил вертикальный бокс из 2-х секций, в верхнюю cекцию - кнопку, в нижнюю секцию - область событий eventbox и после label. Задал обработчики сигналов для button и eventbox. eventbox дал возможность использовать метку как кнопку. Самое интересное, что при задании функции def для label потребовало третий аргумент, хотя в аналогичной def для batton хватает и двух. Тут у меня появилась надежда. Задавал третьим аргументом и window, и box, и eventdox, и label, а оказалось ему(интерпретатору) тут нужно только количество и назови их хоть горшками. У меня в примере они такие : (всё, это, пустяки). Кириллицу, конечно, не берёт)))
1)Нажимаем кнопку 2) Нажимаем на метку 3) Получаем:
>>>
Hello World!
Сколько можно?

но это в Shell IDLE или в консоли, а как в форму загнать???????????

Далее я приведу код hml и код Python. Можно скопировать hml и сохранить его как builder_example.glade и,
запустив питона посмотреть как мелко я плаваю
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
  <requires lib="gtk+" version="3.12"/>
  <object class="GtkWindow" id="window1">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="default_width">440</property>
    <property name="default_height">250</property>
    <signal name="destroy" handler="on_window1_destroy" swapped="no"/>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="on_button1_clicked" swapped="no"/>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkEventBox" id="eventbox1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <signal name="button-press-event" handler="on_eventbox1_button_press_event" swapped="no"/>
            <child>
              <object class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">label</property>
              </object>
            </child>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gi.repository import Gtk
 
class Handler:
    def on_window1_destroy(self, *args):
        Gtk.main_quit (*args)
 
    def on_button1_clicked (self, button):
        print("Hello World!")
    def on_eventbox1_button_press_event (vse,eto,pustyaki):
        print("Сколько можно?")
               
builder = Gtk.Builder()
builder.add_from_file("builder_example.glade")
builder.connect_signals(Handler())
window = builder . get_object ( "window1" ) 
window.show_all()
 
Gtk . main ()
b_oss
Полезные ресурсы:
The Python GTK+ 3 Tutorial
Glade3 Gtk Python Tutorial

По вашему примеру будет приблезительно так:
def on_button1_clicked (self, button):
  btn = builder.get_object("button1")
  btn.set_label("Hello World")
def on_eventbox1_button_press_event (vse,eto,pustyaki):
  label = builder.get_object("label1")
  label.set_text("Сколько можно?")
Sprouttie
b_oss !!!
Сразу огромное спасибо!!! В первую очередь посмотрел ссылки. Да, я эти ресурсы знаю и они лучшие. Только http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html идеальное пособие для изучения gtk-3, если не используешь редактор интерфейсов Glade, т.е. всё ручками. Я понимаю, что для мелких задач типа моей не нужен Glade, но если бы в этом учебнике было продублировано в каждом разделе примером с созданием формы именно через редактор, цены бы ему не было вообще. Ведь это были бы кирпичики из которых каждый смог бы сложить здание по своему замыслу.
Второй туториал http://www.gnipsel.com/glade/index.html просто великолепный. Но там используется Glade-3 ещё в той версии где был gtk-2. Понятно, что опытному человеку перекроить коды под gtk-3 не составит труда, но моя проблема в том, что я ставлю телегу впереди лошади. Не изучив Питон и не поняв процессы в gtk, пытаюсь конструировать методом тыка. Но тык пока слабоват)))
Дальше: САМОЕ ГЛАВНОЕ!!!!! ТВОЙ КОД РАБОТАЕТ!!! Я В ВОСТОРГЕ!!!ОГРОМНАЯ БЛАГОДАРНОСТЬ!!!
Тем, кому интересно, можно проделать махинации из первого моего сообщения, но код Питона запустить вот в таком виде с дополнением от b_oss :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gi.repository import Gtk
 
class Handler:
    def on_window1_destroy(self, *args):
        Gtk.main_quit (*args)
    def on_button1_clicked (self, button):
        btn = builder.get_object("button1")
        btn.set_label("Hello World!")
    def on_eventbox1_button_press_event (self, button,NONE):
        label = builder.get_object("label1")
        label.set_text("Сколько можно?")
               
builder = Gtk.Builder()
builder.add_from_file("builder_example.glade")
builder.connect_signals(Handler())
window = builder . get_object ( "window1" ) 
window.show_all()
 
Gtk . main ()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB