GTK-2, Glade und ComboBox

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Hallo.

Langsam lerne ich dazu. Trotzdem scheine ich wieder in einer Sackgasse gelandet zu sein.

Ich habe mit Glade-2 ein GTK-GUI erstellt, dass drei ComboBoxen(?nennt man die Mehrzahl so?) enthält.

Diese sollen ihre Einträge aus einem Skript erhalten. Mit folgendem Code klappt das auch schon ganz gut.

Code: Alles auswählen

[...]

combo1 = xml.get_widget('combo1')
combotmp1 = popen('find /opt/gnome/share/themes -name gtk-2* -type d | awk -F / \'{print $6}\' | sort')
comboinhalt1 = combotmp1.readlines()
combo1.set_popdown_strings(comboinhalt1)

[...]
Allerdings habe ich bei den Einträgen dann ein recht komisches Zeichen hinten drann. Das besteht aus einem hochgestellten V und einem T. Dazu kommt, dass es aussieht, als käme nach jedem Eintrag eine Leerzeile.

Wie bekomme ich das weg?

Zur Erklärung wegen der zweiten Codezeile: listdir kann ich hier nicht nehmen, da nur Verzeichnisse angezeigt werden sollen, die ein ganz bestimmtes Unterverzeichnis enthalten. Vielleicht lässt sich das auch über Python realisieren. Nur bisher habe ich da keine Lösung gefunden.

Marcus
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi bmh1980,

da sind wohl noch die "linefeeds" an den Strings.

Code: Alles auswählen

comboinhalt1 = [s.rstrip() for s in combotmp1.readlines()]
sollte es beheben.

Gruß

Dookie
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hallo nochmal,

hier die Pythonlösung für die Directoryliste:

Code: Alles auswählen

import os
mypath = "/opt/gnome/share/themes"
comboinhalt1 = [x[0] for x in os.walk(mypath) if 'gtk-2.0' in x[1]]
Falls du nicht die kompletten Pfade haben willst sondern nur die Verzeichnisnamen:

Code: Alles auswählen

comboinhalt1 = [x[0].split("/")[-1] for x in os.walk(mypath) if 'gtk-2.0' in x[1]]
Gruß

Dookie
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Super! Funktioniert so, wie es soll. Danke.

Mir ist aber noch unklar, wie ich jetzt richtig an den ausgewählten Texte komme.

Sobald ein Eintrag ausgewählt wird, soll der Eintrag auf der Konsole (zumindest Bis alles 100 %ig funktioniert) ausgegeben werden.

Mit

Code: Alles auswählen

text = combo1.entry.get_text()
print 'Du hast '+text+' ausgewaehlt'
funktioniert das auch schon. Allerdings wird die Zeile zwei Mal ausgegeben. Das erste Mal ohne den Text aus dem ComboText und das zweite Mal mit dem Text.

Ich habe schon nach einem Gegenstück zu rstrip gesucht, bzw. Hilfe zu rstrip. Aber weder die Python-Shell, noch meine schlauen Bücher sagen mir nix dazu. :(

Marcus
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

ich denke mal deine Funktion wird beim Mausklick 2x aufgerufen, einmal bei Mousedown, wo aber noch gar kein Text selektiert wurde, und beim Mouseup mit dem selektierten Text.

Code: Alles auswählen

text = combo1.entry.get_text()
if text:
    print 'Du hast '+text+' ausgewaehlt'
reicht um zu Testen ob ein eintrag selektiert wurde oder nicht.

Die Methode rstrip() löscht alle "Whitespaces"(space, tab, cr, lf) am Ende eines Strings. Ein Gegenstück wär

Code: Alles auswählen

testtext = "Hallo Welt!"
testtext += "\n"
Wenn Du meine Version für die Directoryliste verwendest, brauchst Du das rstrip() nicht.
Die Stringmethoden findest Du hier -> http://www.python.org/doc/current/lib/s ... thods.html oder mit pydoc str


Gruß

Dookie
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Code: Alles auswählen

text = combo1.entry.get_text()
if text:
    print 'Du hast '+text+' ausgewaehlt'
Das war es. Nochmals Danke!
Dookie hat geschrieben:ich denke mal deine Funktion wird beim Mausklick 2x aufgerufen, einmal bei Mousedown, wo aber noch gar kein Text selektiert wurde, und beim Mouseup mit dem selektierten Text.
Nein. Ich habe unter Glade das Signal changed eingesetzt. Ich bin mir zwar nicht sicher, ob es richtig ist, aber dem Namen nach hörst es sich gut an.

Immerhin soll der obige Code nur dann ausgeführt werden, wenn der Eintrag geändert wurde. Ich finde, dass sich 'changed' da richtig anhört.

Gruß

Marcus
Antworten