Pygtk mit Kiwi

Was ist Kiwi?

Ein Layer der auf pygtk aufsetzt und es etwas einfacher macht.

Projekt Homepage

Was kann Kiwi?

Dialoge

Ohne Kiwi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
dia = gtk.MessageDialog()
dia.add_buttons( gtk.STOCK_OK, gtk.RESPONSE_YES)
dia.set_default_response(gtk.RESPONSE_YES)
dia.set_markup(message)
dia.run()
dia.destroy()

dia = gtk.MessageDialog()
dia.add_buttons( gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_OK)
dia.set_default_response(gtk.RESPONSE_YES)
dia.set_markup(message)
if dia.run() == gtk.RESPONSE_YES:
    dia.destroy()
    return True
dia.destroy()
return False

Mit Kiwi

1
2
3
4
5
6
from kiwi.ui.dialogs import yesno, info, error
error('Ein Fehlerdialog')
info('Infodialog')
resp = yesno('Ja/Nein')
if resp == gtk.RESPONSE_YES:
    print `ja`

kiwi.ui.dialogs API

Was noch?

Zum Beispiel Listen

Noch mehr

Delegates. Ein Delegate ist ein View und Controller zusammengefügt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/env python
import gtk
from kiwi.ui.delegates import Delegate

class Farenheit(Delegate):
    widgets = [`quitbutton`, `temperature`, `celsius`, `farenheit`,
               `celsius_label` , `farenheit_label`, `temperature_label`]
    gladefile = `faren`
    def __init__(self):
        Delegate.__init__(self, delete_handler=self.quit_if_last)

    def convert_temperature(self, temp):
        farenheit = (temp * 9/5.0) + 32
        celsius = (temp - 32) * 5/9.0
        return farenheit, celsius

    def clear_temperature(self):
        self.farenheit.set_text(``)
        self.celsius.set_text(``)

    # Signal handlers

    def on_quitbutton__clicked(self, *args):
        self.hide_and_quit()

    def after_temperature__changed(self, entry, *args):
        temp = entry.get_text().strip() or None
        if temp is None:
            self.clear_temperature()
        else:
            try:
                farenheit, celsius = self.convert_temperature(float(temp))
            except ValueError:
                farenheit = celsius = float('nan')
            self.farenheit.set_text(`%.2f` % farenheit)
            self.celsius.set_text(`%.2f` % celsius)

delegate = Farenheit()
delegate.show()
gtk.main()

Der Unterschied zu normalem pygtk liegt darin, dass man die Widgets nicht aus dem Glade-/ XML-Tree auslesen muss, sondern diese bequem in einer List angeben kann. Außerdem müssen die Eventhandler nicht explizit gebunden werden, das wird automatisch gemacht (auch wenn es in Python heißt explicit is better than implicit). Das ist nur ein kleiner Teil dessen, was Kiwi an Erleichterung bringt. Am besten mal auf die Homepage surfen und sich da weiter stöbern.