Блог

Python: Работаем с gtk

Первая Ваша программа на Python с использованием графической библиотеки gtk.

Для проектирования интерфейса очень хорошо поможет и облегчит работу. Glade (http://glade.gnome.org/) – это быстрая и лёгкая программа для проектирования пользовательский интерфейс для GTK+ и GNOME окружение рабочего стола. В Glade пользовательские интерфейсы, сохраняются в виде XML, а также с помощью GtkBuilder GTK+ объект они могут быть загружены приложений динамически по мере необходимости. Использование Glade XML файл могут использовать, такие языки как C, C++, Java, Python и другие. Чтобы установить Glade в Ubuntu он есть в “Центре приложений Ubuntu”.

Итак преступаем к первой нашей программе, на Python с использованием gtk. Первым, что нам нужно создать XML файл, конфигурации интерфейса.

Нужно сделать добавить на рабочую область окно, на окно добавляем горизонтальную группу кнопок в группе кнопок делаем количество 1, та добавляем кнопку. Также Вам нужно добавить на кнопку сигнал, on_test_clicked (test – имя кнопки, clicked – событие). В результате у нас есть XML файл такого вида:

XML:

<?xml version="1.0" encoding="UTF-8"?>
<glade-interface>
  <!-- interface-requires gtk+ 2.16 -->
  <!-- interface-naming-policy project-wide -->
  <widget class="GtkWindow" id="window">
    <property name="visible">True</property>
    <property name="title" translatable="yes">Test gtk + glade</property>
    <property name="window_position">center</property>
    <child>
      <widget class="GtkHButtonBox" id="hbuttonbox2">
        <property name="visible">True</property>
        <child>
          <widget class="GtkButton" id="test">
            <property name="label" translatable="yes">Test</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="on_test_clicked"/>
          </widget>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
      </widget>
    </child>
  </widget>
</glade-interface>

Исходный код Вашей первой gtk программы.

code:

#!/usr/bin/env python
# coding: utf-8
import sys

try:  
    import pygtk  
    pygtk.require("2.0")  
except:  
    pass  
try:
    import gtk 
    import gtk.glade
except:
    print("GTK Not Availible")
    sys.exit(1) 

class Main:
    def __init__(self):
        # interface, tree elemet
        self.widget = gtk.glade.XML( "main.glade" )

        # Dictionary events
        dic = {
            "on_test_clicked": self.on_test_clicked
        }

        # Connect signal with processor
        self.widget.signal_autoconnect( dic )

        self.window = self.widget.get_widget("window")

        if self.window:
            self.window.connect("destroy", self.close_app)
            gtk.main()
            self.window.show()

    # Close application
    def close_app(self, widget):
        gtk.main_quit()

    # Click button
    def on_test_clicked(self, widget):
        _dialog = gtk.MessageDialog(None, type=gtk.MESSAGE_QUESTION,buttons=gtk.BUTTONS_YES_NO,message_format="Hello World!")
        x = _dialog.run()
        if x == gtk.RESPONSE_YES:
            print "YES was pressed"
        if x == gtk.RESPONSE_NO:
            print "No was pressed"

        _dialog.destroy()

if __name__=='__main__':
    Main()

После чего выполняем python адресс_к_файлу

Если у вас при компиляции выдает следующее сообщение:

self.widget = gtk.glade.XML( “main.glade” )
RuntimeError: could not create GladeXML object

Сохраните Ваш XML файл не в GtkBuilder, а в Libglade