Pygtk mit Kiwi
Was ist Kiwi?
Ein Layer der auf pygtk aufsetzt und es etwas einfacher macht.
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` |
Was noch?
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.