command im OptionMenu

Fragen zu Tkinter.
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

wie bekomme ich die command-Funktion in ein Optionsmenü, wenn ich auch die Auswahl des Menüs variabel gestalten muss?

Die einfache Version ohne veränderbare Auswahl:

Code: Alles auswählen

from Tkinter import *

def test(e):
    print 'mach was'

root = Tk()
var_1 = StringVar()
om = OptionMenu(root,var_1,'test1','test2','test3',command=test)
om.pack()
root.mainloop()

Version mit veränderbarer Auswahl:

Code: Alles auswählen

from Tkinter import *

def test(e):
    print 'mach was'

tup = 'test4','test5','test6'
root = Tk()
var_1 = StringVar()
om = apply(OptionMenu,(root,var_1,)+tuple(tup))
om.pack()
root.mainloop()
Nur bekomme ich in der zweiten Version das command = test nicht reingebastelt. Hat da jemand einen Rat für mich?

Stephan
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

ich hab zwar keine ahnung, wie apply funktioniert...
ich denk mal so könnte es funktionieren:
dü übergibst nen parameter mit nem dictionairy... in der art: {"command":test}
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
BlackJack

`apply` sollte nicht mehr verwendet werden (siehe ``help(apply)``). Als ersatz gibt's die `*` Syntax für "Positions-Argumente" und `**` für Schlüssewort-Argumente. Damit ginge es dann so:

Code: Alles auswählen

import Tkinter as tk

def test(event):
    print 'Hello'

data = ('test4', 'test5', 'test6')
root = tk.Tk()
var = tk.StringVar()
options = tk.OptionMenu(root, var, command=test, *data)
options.pack()
root.mainloop()
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Vielen Dank, das funktioniert wunderbar. Das mit den * war mir noch gar nicht bekannt bzw. habe ich noch nirgends gelesen.

Stephan
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

wie kann man für verschiedene klicks verschiedene ausgaben machen?
BlackJack

Wie soll man so eine Frage beantworten können?
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

hehe stimmt wohl!

naja ich hab folgendes Prob:

Ich kann wie oben beschrieben das machen, doch dann führt er alle Auswahlmöglichkeiten mit dem selben befehl aus!

Ich hoffe das hilft, danke

Flo
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Du kannst immer nur die eine definierte Funktion aufrufen. Dort hast du aber die Möglichkeit, in Abhängigkeit der gesetzten Variable unterschiedliche Dinge durchzuführen.

Code: Alles auswählen

import Tkinter as tk 

def test(event):
    if var.get() == 'test4':
        print 'mach was'
    elif var.get() == 'test5':
        print 'mach was anderes'
    else:
        print 'mach nichts'

data = ('test4', 'test5', 'test6') 
root = tk.Tk() 
var = tk.StringVar() 
options = tk.OptionMenu(root, var, command=test, *data) 
options.pack() 
root.mainloop()
Stephan
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

danke vielmals!^^
Antworten