Learn More

A framework for Python applications with graphical user interfaces.

How it looks

This is how it looks, notice that required and invalid fields will have an icon warning the user and also, he won't be able to go any further (Ok button)
images/examples/personalinformation.png

The code

For more examples, take a look at the repository

# This example illustrates the use of entries with validations

import datetime

import gtk

from kiwi.environ import require_gazpacho
require_gazpacho()
from kiwi.datatypes import ValidationError
from kiwi.ui.delegates import Delegate


class Person:
    pass

class Form(Delegate):

    def __init__(self):
        Delegate.__init__(self,
                          gladefile="personalinformation",
                          delete_handler=self.quit_if_last)

        self.nationality.prefill(['Brazilian',
                                  'Yankee',
                                  'Other'])
        self.gender.prefill(('Male', 'Female'))
        self.age.set_mask('00')

        self.register_validate_function(self.validity)
        self.force_validation()

    # here we define our custom validation. When a user types anything,
    # the validate signal calls methods with the signature
    # on_widgetname__validate
    def on_name__validate(self, widget, data):
        if len(data) > 20:
            # we need to return an exception that will be displayed on
            # the information tooltip and the delegate option
            return ValidationError("The name is too long")

    def on_age__validate(self, widget, year):
        if year > 75:
            return ValidationError("Too old")

    def on_height__validate(self, widget, data):
        if data > 200:
            return ValidationError("The height is too tall")

    def on_weight__validate(self, widget, data):
        if float(data) > 90:
            # this is really not the type of validation that you would use :)
            # anyway, it's just for reference
            return ValidationError("Dude! You need to lose "
                                             "some weight!")

    def on_nationality__validate(self, widget, data):
        if data != 'Yankee':
            return ValidationError("Go home terrorist!")

    def validity(self, valid):
        self.ok_btn.set_sensitive(valid)

    def on_about__validate(self, widget, data):
        if not 'kinda' in data.lower():
            return ValidationError("use a better language")

person = Person()
person.name = u'John Doe'
person.age = 36
person.birthdate = datetime.datetime(year=1969, month=2, day=20)
person.height = 183.0
person.weight = 86.0
person.nationality = 'Yankee'
person.about = 'Kinda fat'
person.status = True
person.gender = 'Female'

form = Form()
proxy = form.add_proxy(person, ['name', 'age', 'birthdate',
                                'height', 'weight', 'about',
                                'nationality', 'status', 'gender'])
form.show_all()

def on_ok_btn_clicked(widget):
    print "Name:", person.name
    print "Age:", person.age
    print "Birthday:", person.birthdate
    print "Height:", person.height
    print "Weight:", person.weight
    print "Nationality:", person.nationality
    print "About Your self:", person.about
    print "Status:", person.status

    gtk.main_quit()

form.ok_btn.connect("clicked", on_ok_btn_clicked)
gtk.main()