LINUX.ORG.RU
ФорумTalks

Быдлокод Pygtk


0

1
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk


class tmpWin(gtk.Window):
    def __init__(self, parent=None):
        gtk.Window.__init__(self)
        try:
            self.set_screen(parent.get_screen())
        except AttributeError:
            self.connect('destroy', lambda *w: gtk.main_quit())

        self.set_title(self.__class__.__name__)
        self.set_border_width(8)

        vb = gtk.VBox()
        self.add(vb)
        
        self.i=0
        
        self.arr_event = []
        self.arr_event.append(self.on_key_press_event)
        self.arr_event.append(self.on_key_press_event_ex)

        self.entry=gtk.Entry()

        vb.pack_start(self.entry, False, False)

        btn=gtk.Button("PressMe")
        btn.connect("clicked", self.btn_cliked)
        vb.pack_start(btn, False, False)
        self.show_all()


    def btn_cliked(self, btn):
        self.entry.connect("key-press-event", self.arr_event[self.i])
        btn.set_label("PressMe"+str(self.i))
        if self.i == 0: self.i+=1
        else: self.i = 0


    def on_key_press_event(self, widget, key):
        print self.i, "ONE"
    
    def on_key_press_event_ex(self, widget, key):
        print self.i, "TWO"

def main():
    tmpWin()
    gtk.main()

if __name__ == '__main__':
    main()

при создании формы динамически создается виджет, к которому вешается событие, как по человечески это сотворить?

★★★★

from gi.repository import Gtk

class MainWindow:

    def __init__(self):

#        ui_file = os.path.join(
#            os.path.dirname(__file__), 'ui', 'info_edit.glade'
#            )

#        ui = Gtk.Builder()
#        ui.add_from_file(ui_file)

        window = Gtk.Window("P")

        butt = Gtk.Button()

        window.add(butt)

        butt.connet('clicked', self.someAction)

        window.show_all()
        
    def someAction(self, button):
        pass
AGUtilities ★★★
()
Ответ на: комментарий от deity

честно говоря, не понял что не понятно

открываем devhelp :: GTK+ 3 Reference Manual :: GtkEntry. Видим, что кейпресса в сигналах там нет, значит смотрим выше по иерархии и находим key-press-event в GtkWidget, правильно? читаем: To receive this signal, the GdkWindow associated to the widget needs to enable the GDK_KEY_PRESS_MASK mask.

оно?

AGUtilities ★★★
()

Что еще можно написать на питоне, окромя быдлокода?

CuHe3yb
()
Ответ на: комментарий от AGUtilities

оно то оно, вопрос в другом как назначать в ходе выполнения программы разные обработчики на кейпресс, к примеру python example.py --one один обработчик, python example.py --two другой, см пример выше

deity ★★★★
() автор топика
Ответ на: комментарий от deity

import optparse

def one(self): do_one()

def two(self): do_two()

ну и забиндить ссылки на self.one и self.two в if-блоке в зависимости от результатов optparse. Хотя, гтк, может, и не прокатит.

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

прокатит. питон вообще придаёт немереную гибкость Gtk-шным прогам, особенно с gi.repository

AGUtilities ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.