Необходимо:
python-gtk2-tutorial
python-gtk2
python-glade
ну и сам glade 2
Рисуем в glade окно, кидаем туда какие-то widgets, сохраняем. У меня это было vertical box на 2 позиции, text view с именем textview1 и кнопки с именем button1 и button2.
далее слова класс и объект понимать как сининимы
Общая обвязка дл python:
Код: Выделить всё
import pygtk ; pygtk.require('2.0')
import gtk
import gtk.glade
class GUI(gtk.glade.XML):
def __init__(self):
gtk.glade.XML.__init__(self, 'test.glade')
self.signal_autoconnect(self)
if __name__ == "__main__":
app = GUI()
gtk.main()
В glade для кнопки button1 добавляем обработчик сигнала clicked, по умолчанию он обзывается on_button1_clicked. В классе прописываем метод для обработки сигнала :
Код: Выделить всё
def on_button1_clicked(self, widget):
gtk.main_quit()
Вторая кнопка бедт дописывать текст в textview1. Для каждого объекта типа TextView существует объект типа TextBuffer с котором непосредственно и хранится текст.
При вызове метода-обработчика ему в виде параметров поступают 2 объекта - сам класс (он же self типа PyGladeXML), второй - widget - т.е. в данном случае gtk.Button типа GtkButton
Для доступа к виджетам на форме надо использовать метод get_widget('имя_финтифлюшки'), например tv = self.get_widget('vextview1').
Для изменения содержимого этого самого textview1 необходимо получить связаный с ним объект типа TextBuffer, для чего пользуется метод get_buffer() объекта TextView - buffer = tv.get_buffer(). Для того, чтобы вставить текст после курсора используется метод insert_at_cursor("ТЕКСТ") - buffer.insert_at_cursor("\nТЕКСТ!")
Теперь все вместе в виде обработчика button2 (ессно не забываем в glade добавить обработчик для сигнала clicked)
Код: Выделить всё
def on_button2_clicked(self, widget):
tv = self.get_widget('vextview1')
buffer = tv.get_buffer()
buffer.insert_at_cursor("\nТЕКСТ!")
Код: Выделить всё
def on_button2_clicked(self, widget):
self.get_widget('vextview1').get_buffer().insert_at_cursor("\nТЕКСТ!")
file:///usr/share/doc/python-gtk2-tutorial/html/index.html и ваять всячески поделки.
Код: Выделить всё
import pygtk ; pygtk.require('2.0')
import gtk
assert gtk.pygtk_version >=(1,99,12), 'pygtk version too old'
import gtk.glade
class GUI(gtk.glade.XML):
def __init__(self):
gtk.glade.XML.__init__(self, 'test.glade')
self.signal_autoconnect(self)
self.i=1
def on_button4_clicked(self, widget):
self.i=self.i+1
tv = self.get_widget('textview1')
buffer = tv.get_buffer()
buffer.insert_at_cursor("\n %s"%self.i.__str__())
tv.scroll_to_mark(buffer.get_insert(),0 )
def on_button3_clicked(self, widget):
gtk.main_quit()
if __name__ == "__main__":
app = GUI()
gtk.main()
Код: Выделить всё
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>
<widget class="GtkWindow" id="window1">
<property name="visible">True</property>
<property name="title" translatable="yes">window1</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="default_width">640</property>
<property name="default_height">480</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<child>
<widget class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child>
<widget class="GtkTextView" id="textview1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="overwrite">False</property>
<property name="accepts_tab">True</property>
<property name="justification">GTK_JUSTIFY_LEFT</property>
<property name="wrap_mode">GTK_WRAP_NONE</property>
<property name="cursor_visible">True</property>
<property name="pixels_above_lines">0</property>
<property name="pixels_below_lines">0</property>
<property name="pixels_inside_wrap">0</property>
<property name="left_margin">0</property>
<property name="right_margin">0</property>
<property name="indent">0</property>
<property name="text" translatable="yes">test</property>
<signal name="insert_at_cursor" handler="on_textview1_insert_at_cursor" last_modification_time="Sun, 19 Dec 2004 14:58:48 GMT"/>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
<property name="spacing">0</property>
<child>
<widget class="GtkButton" id="button3">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Выход нахуй</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Выход</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button3_clicked" last_modification_time="Sun, 19 Dec 2004 13:44:35 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="button4">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">СмотÑ?еть!</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button4_clicked" last_modification_time="Sat, 18 Dec 2004 21:41:48 GMT"/>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>