Seite 1 von 1

OptionMenu

Verfasst: Mittwoch 3. Juni 2009, 15:29
von Pascal
Hallo Leute,

ich habe eine Frage zu OptionMenu.

Code: Alles auswählen

from Tkinter import *
root = Tk()

var1 = StringVar()
opt1 = OptionMenu(root, var1, 'A', 'B', 'C')   
opt1.pack(fill=X)
var1.set('A')

def state(): 
   print var1.get()

Button(root, command=state, text='state').pack()

root.mainloop()

Anstelle des Buttons, der gedrückt werden muss, würde ich gern die Prozedur state() sofort aufrufen, sobald sich der Wert geändert hat.

Ich konnte dazu leider nicht finden.
Aber bestimmt kann mir einer von euch sagen, was ich ergänzen muss.
Schon mal vielen Dank
Pascal

Verfasst: Mittwoch 3. Juni 2009, 15:47
von BlackJack
@Pascal: Man kann sich auf jeden Fall an das `StringVar`-Objekt halten und da eine Funktion zum "trace"n registrieren. Schau Dir mal die `trace*()`-Methoden an.

Verfasst: Mittwoch 3. Juni 2009, 16:06
von wuf
......Hier das Code-Stück (BlackJack hat mich überholt):

Code: Alles auswählen

# Skriptname: opten_menu_01_01.py (wuf)

from Tkinter import *
root = Tk()

def state(*args):
   print var1.get()

var1 = StringVar()
var1.trace('w', state)

opt1 = OptionMenu(root, var1, 'A', 'B', 'C')   
opt1.pack(fill=X)
var1.set('A')

Button(root, command=state, text='state').pack()

root.mainloop() 
Gruss wuf :wink:

Verfasst: Mittwoch 3. Juni 2009, 18:52
von yipyip
...als Ergänzung hier noch eine Situation,
wo man kein 'trace()' braucht:

Code: Alles auswählen

import Tkinter as tk

class Optionator(object):
  
  def __init__(self, root):

    self.root = root
    self.svar = tk.StringVar(root)
    self.svar.set('1')
    self.options = tk.OptionMenu(root, self.svar, *map(str, range(1, 11)))   
    self.label = tk.Label(root, width=22, textvariable=self.svar, bg='yellow')
    self.label.pack(fill=tk.X)
    self.options.pack()


root = tk.Tk()
Optionator(root)
root.mainloop()
:wink:
yipyip

Verfasst: Mittwoch 3. Juni 2009, 19:02
von Pascal
Danke, genau das habe ich gesucht

@wuf

jetzt kenn ich die methode auch ;)