formatierte strings in pygtk messagedialog [gelöst]

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
DonVla
User
Beiträge: 10
Registriert: Samstag 17. Februar 2007, 13:16

hallo!

ich habe eine kleines skript geschrieben, dass ein frage-dialog aufstellt. text und title soll per kommandozeile gegeben werden:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def usage():
    print "USAGE:\t" + sys.argv[0] + " --title=|-T TITLE --text=|-t TEXT"

def questionDialog(title, text):
    question = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL, type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_OK_CANCEL, message_format=text)
    question.set_title(title)

    answer = question.run()
    if answer == gtk.RESPONSE_OK:
        question.destroy()
        sys.exit()
    else:
        question.destroy()
        sys.exit(1)


#-------------------------------------------------------------------------------             
#                                    Main
#-------------------------------------------------------------------------------             
import sys, getopt
import gtk, pygtk

if __name__ == '__main__':
    try:
        opts, args = getopt.getopt(sys.argv[1:], "T:t:h", ["title=", "text=", "help"])
    except getopt.GetoptError:
        # print help information and exit:
        usage()
        sys.exit(2)
    if len(sys.argv) <= 1:
        usage()
        sys.exit(1)
    for o, a in opts:
        if o in ("-h", "--help"):
            usage()
            sys.exit()
        if o in ("-T", "--title"):
            TITLE = a
        if o in ("-t", "--text"):
            TEXT = a
    questionDialog(TITLE, TEXT)
mein problem ist nun, dass ich keine escape-charaktere im text angeben kann.
ich möchte --text="zeile1\nzeile2" als options mitgeben und das "\n" soll dann als newline interpretiert werden.
jetzt wird dies nur als \n dargestellt.
gibt es eine möglichkeit dies umzusetzen.

vlad

ps: noch eine frage. wie kann ich es einstellen, dass wenn ich ENTER drücke dann auch automatisch der OK_BUTTON gewählt wird und mit ESC dann CANCEL_BUTTON.
Zuletzt geändert von DonVla am Sonntag 30. Dezember 2007, 17:38, insgesamt 1-mal geändert.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Warum verwendest du nicht einfach zenity?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
DonVla
User
Beiträge: 10
Registriert: Samstag 17. Februar 2007, 13:16

haha. tu ich auch.
jetzt bitte eine ernsthafte antwort.

vlad
lunar

Code: Alles auswählen

TEXT = TEXT.replace(r'\n', '\n')
Das hättest du allerdings durch einen Blick in die Doku selbst rausfinden können. :roll:

Btw, Variablen im Code werden laut PEP8 klein geschrieben, und zum Parsen von Argumenten nimmt man besser optparse.

Und veers' Frage bleibt weiter unbeantwortet... :roll:
DonVla
User
Beiträge: 10
Registriert: Samstag 17. Februar 2007, 13:16

danke lunar!

ich ahtte auch mit raw-strings rumgespielt, aber auf die replace idee bin ich leider nicht gekommen...

die andere frage war, wie ich enter dem ok_button zuordnen kann.

danke,

vlad
DonVla
User
Beiträge: 10
Registriert: Samstag 17. Februar 2007, 13:16

ok, das sieht nun so aus:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def questionDialog(title, text):
    question = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL, type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_NONE, message_format=text)
    question.set_title(title)

    settings = gtk.settings_get_default()
    settings.set_property('gtk-alternative-button-order', True)
    ok_button = question.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
    ok_button.grab_default()
    cancel_button = question.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)

    question.set_alternative_button_order([gtk.RESPONSE_CANCEL, gtk.RESPONSE_OK])

    answer = question.run()
    if answer == gtk.RESPONSE_OK:
        question.destroy()
        sys.exit()
    else:
        question.destroy()
        sys.exit(1)


#-------------------------------------------------------------------------------
#                                    Main
#-------------------------------------------------------------------------------
import sys, optparse
import gtk, pygtk

if __name__ == '__main__':

    parser = optparse.OptionParser(usage = "%prog --title=|-T TITLE --text=|-t TEXT", version = "%prog 0.2")
    parser.add_option("-T", "--title", dest="title", default="Set title here (-T TITLE)", type="string", help="define title of the dialog")
    parser.add_option("-t", "--text", dest="text", default="Your text here (-t TEXT)", type="string", help="define text of the dialog")
    (options, args) = parser.parse_args()
    title = options.title
    text = options.text
    text = text.replace(r'\n', '\n').replace(r'\t', '\t')

    questionDialog(title, text) 
die ENTER-ok_buton zuordnung habe ich mit grab_default() gemacht.

vielen dank für die freundlichen antworten,

vlad
Antworten