OptionMenu

Fragen zu Tkinter.
Antworten
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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
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.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

......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:
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

...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
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Danke, genau das habe ich gesucht

@wuf

jetzt kenn ich die methode auch ;)
Antworten