PyGTK callback, Argument für Funktion übergeben
Verfasst: Freitag 22. Januar 2010, 10:37
Hallo,
Da ich keine Sektion für PyGTK gefunden hab, poste ich das Problem mal hier rein.
Das Problem: Wenn in einen Knopf mit einer Funktion verbinde (connect),
lassen sich keine Argumente übergeben ohne Fehler zu verursachen.
Output:
-----------
cryptsetup luksOpen /dev/mapper/VG00-LV04 LV04
Traceback (most recent call last):
File "./args.py", line 26, in <module>
button.connect("clicked", crypt_mount(DEVICE))
TypeError: second argument must be callable
-----------
Wenn ich der Funktion "crypt_mount" nichts übergebe, kommt kein Fehler.
Folgende Weise funktioniert auch nicht.
Hier kommt der Fehler, "crypt_mount" würde genau 1 Argument benötigen, habe aber
0 angegeben.
Bisher hab ich es vermieden, im Callback (connect) Argumente zu übergeben - kennt jemand einen Weg wie das geht. Ich bin nach 2h googlen am Ende mit dem Latein.
Danke.
Da ich keine Sektion für PyGTK gefunden hab, poste ich das Problem mal hier rein.
Das Problem: Wenn in einen Knopf mit einer Funktion verbinde (connect),
lassen sich keine Argumente übergeben ohne Fehler zu verursachen.
Code: Alles auswählen
#!/usr/bin/env python
import gtk,pygtk
pygtk.require('2.0')
import os,sys,commands,subprocess
def crypt_mount(mount):
OPEN_CMD='cryptsetup luksOpen ';TARGET=' LV04'
CMD_ALL=OPEN_CMD + mount + TARGET
print(CMD_ALL)
cmd_process = subprocess.Popen(OPEN_CMD + mount + TARGET, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
result = cmd_process.communicate()[0]
print result
DEVICE='/dev/mapper/VG00-LV04'
window = gtk.Window()
window.set_size_request(300,-1)
window.set_title("Crypt devices")
window.set_resizable(True)
window.set_position(gtk.WIN_POS_CENTER)
vbox = gtk.VBox(False, 0)
vbox.show()
window.add(vbox)
button = gtk.Button(DEVICE)
button.connect("clicked", crypt_mount(DEVICE))
vbox.pack_start(button)
button.show()
-----------
cryptsetup luksOpen /dev/mapper/VG00-LV04 LV04
Traceback (most recent call last):
File "./args.py", line 26, in <module>
button.connect("clicked", crypt_mount(DEVICE))
TypeError: second argument must be callable
-----------
Wenn ich der Funktion "crypt_mount" nichts übergebe, kommt kein Fehler.
Folgende Weise funktioniert auch nicht.
Code: Alles auswählen
button.connect("clicked", crypt_mount(), DEVICE)
0 angegeben.
Bisher hab ich es vermieden, im Callback (connect) Argumente zu übergeben - kennt jemand einen Weg wie das geht. Ich bin nach 2h googlen am Ende mit dem Latein.
Danke.