Seite 1 von 1
Tkinter und Pulldown?
Verfasst: Montag 4. Oktober 2004, 13:49
von Mawilo
Hallo,
ich möchte in einem Prog (mit Tkinter) eine Auswahl mit Pulldownmenüs einbauen. Gibt es dafür schon Module? Oder vieleicht kennt jemand gute Links zu diesem Thema?
Bin für jeden Hinweis dankbar.
Stephan
Verfasst: Montag 4. Oktober 2004, 16:40
von mawe
Hi!
Meinst Du Pulldown oder Popup? Pulldown sind doch die ganz normalen, oder? Naja,
hier gibt's für beide ein Beispiel.
Gruß, mawe
Verfasst: Montag 4. Oktober 2004, 19:53
von Mawilo
Hi mawe,
ich glaube, das nennt sich Optionsmenü.
Das sind die Dinger (jedenfalls in Windows) mit einem kleinen Dreieck, und wenn man da drauf klickt, bekommt man eine Auswahl angeboten. Wenn dann ein Eintrag angeklickt wurde, verschwindet die Auswahlliste wieder.
Oh man ist das peinlich
Stephan
Verfasst: Montag 4. Oktober 2004, 20:04
von mawe
Hi!
Nach Deiner Erklärung kann ich sagen, daß ich so etwas noch nie gesehen habe
Es gibt allerdings ein Optionmenu (jedenfalls heisst es so) bei Tkinter. Sieht aber irgendwie anders aus. Schau mal
hier.
Bei den PMW ist auch so etwas dabei (habe ich gelesen).
Gruß, mawe
Verfasst: Montag 4. Oktober 2004, 20:15
von Mawilo
Hi mawe,
so schlecht kann meine Beschreibung nicht gewesen sein - das ist es was ich suche.
Sieht zwar etwas anders aus als in Windows, aber das muss ja kein Nachteil sein.
Vielen Dank
Stephan
Verfasst: Mittwoch 6. Oktober 2004, 14:17
von Mawilo
Hi,
eine Frage habe ich doch noch.
Ich möchte nach einer Auswahl den ausgewählten Wert weiter verarbeiten.
Leider wird so erst nach dem nächsten klick auf das OptionsMenu der Wert aktualisiert.
Code: Alles auswählen
lb1 = Label(fr2,text='Reg: ')
lb1.grid(row=1,column=1,sticky=W)
var1 = StringVar()
var1.set('17')
om1 = apply(OptionMenu,(fr2,var1)+tuple(Reg))
om1.grid(row=1,column=2)
om1.bind('<Button-1>',aktualisieren_reg)
Hat jemand ne Idee, wie der Wert des Menüs schon beim ersten Klick aktualisiert wird?
Stephan
Verfasst: Mittwoch 6. Oktober 2004, 15:44
von mawe
Hi!
Meinst Du in etwa so:
Code: Alles auswählen
from Tkinter import *
root = Tk()
var1 = StringVar()
var1.set("One")
o = OptionMenu(root, var1, "One", "Two", "Three")
o.pack()
l = Label(textvariable=var1)
l.pack()
root.mainloop()
Gruß, mawe
Verfasst: Mittwoch 6. Oktober 2004, 19:43
von Mawilo
Hi mawe,
soweit ist mir das schon klar. Ich möchte, das z.B. eine print-Anweisung immer neu ausgegeben wird.
Code: Alles auswählen
from Tkinter import *
root = Tk()
var1 = StringVar()
var1.set("One")
o = OptionMenu(root, var1, "One", "Two", "Three")
o.pack()
l = Label(textvariable=var1)
l.pack()
print var1.get()
root.mainloop()
das funktioniert leider nicht, da nur beim Erstellen die Variable ausgegeben wird und nicht jedesmal bei einer neuen Eingabe über das OptionMenu
Stephan
Verfasst: Samstag 9. Oktober 2004, 21:33
von Mawilo
Hi,
ich möchte mein Problem noch einmal genauer darstellen.
Code: Alles auswählen
from Tkinter import *
dic = {17:119,18:023,20:056,40:006}
root = Tk()
var1 = StringVar()
var1.set('17')
o = OptionMenu(root, var1,'17','18','20','40')
o.pack()
l = Label(text=dic[int(var1.get())])
l.pack()
root.mainloop()
Wie kann ich die Anzeige im Label aktualisieren, wenn im OptionMenu ein anderer Eintrag ausgewählt wird?
Stephan
Verfasst: Samstag 9. Oktober 2004, 22:17
von mawe
Hi!
Ich habe gerade herausgefunden, daß OptionMenu auch ein
command besitzt (man lernt nie aus
). Das ist wahrscheinlich was Du suchst, oder?
Code: Alles auswählen
from Tkinter import *
dic = {17:"119",18:"023",20:"056",40:"006"}
def set_it(e):
l.configure(text=dic[int(var1.get())])
root = Tk()
var1 = StringVar()
var1.set('17')
o = OptionMenu(root, var1, '17','18','20','40',command=set_it)
o.pack()
l = Label(text=dic[int(var1.get())])
l.pack()
root.mainloop()
Gruß, mawe
Verfasst: Sonntag 10. Oktober 2004, 20:33
von Mawilo
Hi mawe,
ja, das ist es!
Danke
Stephan
Verfasst: Freitag 15. Oktober 2004, 22:25
von Mawilo
Hi,
ich muss noch einmal nerven.
Wenn ich folgenden Code allein starte, werden die Variablen richtig gesetzt und die Anzeige ist ok. Rufe ich die Klasse aus dem Hauptprogramm auf, wird am OptionMenu keine Variable angezeigt und die Variable für den Checkbutton wird auch nicht gesetzt.
Der Code ist vieleicht newbiemäßig - aber es funktioniert ansonsten ganz gut
Hat jemand eine Idee, wo der Fehler bei der Anzeige liegen könnte?
Stephan
Code: Alles auswählen
# -*- coding: cp1252 -*-
from Tkinter import *
import tkMessageBox
class addHafas:
def __init__(self):
self.root = Tk()
self.root.title('Relationen zufügen')
self.fr1 = Frame(self.root,bd=5)
self.fr1.pack()
self.fr2 = Frame(self.root,bd=5)
self.fr2.pack()
self.fr3 = Frame(self.root,bd=5)
self.fr3.pack()
self.fr4 = Frame(self.root,bd=5)
self.fr4.pack()
self.lb1 = Label(self.fr1,text='Relationen zufügen für Region:')
self.lb1.grid(row=1,column=1)
self.region = StringVar()
self.region.set('17')
self.om = apply(OptionMenu,(self.fr1,self.region)+tuple(Regionen))
self.om.grid(row=1,column=2)
self.var_en1 = StringVar()
self.var_en2 = StringVar()
self.var_ch1 = StringVar()
self.var_ch1.set('mit')
self.lb2 = Label(self.fr2,text='Von:')
self.lb2.pack(side=LEFT)
self.en1 = Entry(self.fr2,width=5)
self.en1.pack(side=LEFT)
self.lb3 = Label(self.fr2,text='bis:')
self.lb3.pack(side=LEFT)
self.en2 = Entry(self.fr2,width=5)
self.en2.pack(side=LEFT)
self.ch1 = Checkbutton(self.fr2,text='H&R',
variable=self.var_ch1,
onvalue = 'mit',
offvalue= 'ohne',
takefocus=0)
self.ch1.pack()
self.b0 = Button(self.fr4,text=' Zufügen ',command=self.druck)
self.b0.grid(row=1,column=1)
self.b1 = Button(self.fr4,text='Speichern',command=self.druck,takefocus=0)
self.b1.grid(row=1,column=2)
self.b2 = Button(self.fr4,text=' Beenden ',command=self.end,takefocus=0)
self.b2.grid(row=1,column=3)
self.en1.focus_set()
self.root.mainloop()
def druck(self):
a = []
try:
if os.path.isfile('./Files/HAFAS_REG_%s.txt'%self.region.get())== False:
f = file('./Files/HAFAS_REG_%s.txt'%self.region.get(),'w+')
else:
f = file('./Files/HAFAS_REG_%s.txt'%self.region.get(),'r')
except:
tkMessageBox.showerror('Fehler','Datei HAFAS_REG_%s.txt\
kann nicht gelesen werden'%self.region.get())
for line in f:
a.append(line)
f.close()
a.append('%s-%s,\n'%(self.en1.get(),self.en2.get()))
if self.var_ch1.get()== 'mit':
a.append('%s-%s,\n'%(self.en2.get(),self.en1.get()))
self.en1.delete('0','end')
self.en2.delete('0','end')
f = file('./Files/HAFAS_REG_%s.txt'%self.region.get(),'w')
f.write(''.join(a))
f.close()
def end(self):
self.root.destroy()
Regionen = '01','02','03','04','06','08','09','10',\
'11','12','13','15','16','17','18','19',\
'20','21','22','23','25','26','27','30',\
'31','40','41','43','44','45','46','80'
if __name__ == '__main__':
x = addHafas()
Verfasst: Freitag 15. Oktober 2004, 23:29
von Dookie
Hi Stephan,
was macht das Hauptprogramm? Du kannst nur ein root-Fenster aus Tk() haben! Ich würde entweder das Fenster dann als Parameter an __init__ übergeben oder von Hause aus ein eigenes Fenster mit Toplevel() erzeugen, dann kommt natürlich auch das root.mainloop() raus aus dem __init__!
Gruß
Dookie
Verfasst: Samstag 16. Oktober 2004, 09:02
von Mawilo
Hi Dookie,
ja, das war der Fehler. Mir war nicht bekannt, dass ich nur ein root-Fenster haben kann
Mit Toplevel() funktioniert alles.
Vielen Dank
Stephan
Ähnliches Problem!
Verfasst: Dienstag 24. Mai 2005, 13:13
von target
Da ich ein ähnliches Problem wie Stephan es hatte habe, schreib ich es einfach hier rein...
Ich hatte auch das Problem die Eingaben weiterzuverarbeiten! Hier der Code nun mit dem "command"-Versuch
Code: Alles auswählen
import tkMessageBox
import sys
import os
from Tkinter import *
# Hauptfenster
root = Tk() # Fenster erstellen
Menu=Frame(root)
Menu.grid(row=0,column=0)
Inhalt=Frame(root)
Inhalt.grid(row=1,column=0)
manns = 5
mannsname = [a, b, c]
def manns_save():
global mannsname
auswahllist = []
auswahlmenu = []
auswahltext=Label(Inhalt, text="Eingabe der Spiele am Spieltag")
auswahltext.grid(row=0, column=1)
row = 1
column = 1
def set_it():
auswahllist.append(auswahl.get())
print auswahllist
for i in range(manns):
if i%2==0:
row += 1
column = 1
auswahl = StringVar()
auswahl.set("Bitte auswählen")
auswahlmenu.append(OptionMenu(Inhalt, auswahl, *mannsname,command=set_it))
auswahlmenu[-1].grid(row=row, column=column)
aussehen = {"bg":"grey","font":"arial 10 bold","relief":SUNKEN, "width":15, "activebackground":"darkblue", "activeforeground":"white"}
auswahlmenu[-1].config(aussehen)
column = column + 2
a.) Muss ich es allerdings hinbekommen, dass der Wert vom ersten OptionMenu auch der erste Wert in der Liste ist, auch wenn der Benutzer zuerst einen anderen Wert anklickt..
b.) Zeigt er mir beim OptionMenu bei dem command-Attribut einen Syntax Fehler an?!
EDIT by mawe: Ich sag nur Python-tags
Re:
Verfasst: Freitag 17. September 2010, 15:56
von Py-Prog
mawe hat geschrieben:Hi!
Meinst Du Pulldown oder Popup? Pulldown sind doch die ganz normalen, oder? Naja,
hier gibt's für beide ein Beispiel.
Gruß, mawe
Danke, hat mein Problem gelöst.