GTK-Inputbox

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

So sieht sie aus:

Bild

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
******************************************************************************
* Description:  Zeigt eine Inputbox an und gibt die Eingabe zurück.
* Requirements: Python 2.x: http://www.python.org
*               GTK+ 2.0:   http://www.gtk.org
*               pyGtk:      http://www.pygtk.org/downloads.html
******************************************************************************
"""

import sys
import pygtk
pygtk.require("2.0")
import gtk

stdout_coding = sys.stdout.encoding or sys.getfilesystemencoding()


#----------------------------------------------------------------------
def inputbox(
    title = u"Inputbox", 
    description = u"My inputbox...",
    defaultvalue = u""
):
    """
    Zeigt ein Fenster zum Eingeben eines Textes an
    """
    
    # Dialog
    dialog = gtk.Dialog(title = title)
    dialog.set_modal(True)
    dialog.set_position(gtk.WIN_POS_CENTER)
    dialog.set_border_width(6)
    dialog.set_has_separator(False)
    dialog.set_resizable(False)

    # Buttons
    cancel_button = dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
    ok_button = dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
    ok_button.set_flags(gtk.CAN_DEFAULT)
    ok_button.grab_default()
    ok_button.set_sensitive(False)
    
    # Label
    label = gtk.Label(description)
    label.set_line_wrap(True)
    #label.set_use_markup(True)
    dialog.vbox.pack_start(label, True, True, 0)
    label.show()
    
    # Textbox
    entry = gtk.Entry()
    dialog.vbox.pack_start(entry, True, True, 8)
    def entry_key_release_event(widget, event, data = None):
        if widget.get_text() == "":
            ok_button.set_property("sensitive", False)
        else:
            ok_button.set_property("sensitive", True)
            if event.hardware_keycode == 13:
                dialog.response(gtk.RESPONSE_OK)
    entry.connect("key-release-event", entry_key_release_event)
    if defaultvalue:
        entry.set_text(defaultvalue)
        ok_button.set_sensitive(True)
    entry.show()
    
    # Anzeigen und zurück geben
    if dialog.run() == gtk.RESPONSE_OK:
        retval = entry.get_text()
        dialog.destroy()
        return retval
    else:
        return ""
    

#----------------------------------------------------------------------
def main():
    """
    Hauptfunktion zum Testen
    """

    retval = inputbox(
        title = u"Das ist der Titel",
        description = u"Bitte gib etwas ein...",
        defaultvalue = u"Standardwert"
    )
    print retval.encode(stdout_coding)


#----------------------------------------------------------------------
if __name__ == "__main__":
    main()
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Warum wird der Dialog nicht wirklich versteckt/zerstört? Wenn ich danach einen anderen Befehl benutze, bleibt der Dialog als unbrauchbarer Überrest...
Antworten