Hallo ich suche in Tkinter
eine art button menu. Es soll ein button sein der nur aus einem pfeil nach unten besteht , bei dem wenn man draufklickt sich das menu oeffnet. Gibt es sowas ? Ich kann leider nirgends was finden. Ich bin sehr dankbar fuer jede Hilfe!
Button menu
Was für ein Menü soll sich denn öffnen? Ein Toplevel- oder ein Popup-Menü? Beim Popup-Menü ist dies ja relativ einfach:
Du erstellst Dir einen beliebigen Button, der ja auch nur aus einem Pfeil bestehen kann, und bindest daran eine Routine, die das Popup-Menü mit der Menü-Methode .post(x, y) an der Position (x, y) darstellt.
Du erstellst Dir einen beliebigen Button, der ja auch nur aus einem Pfeil bestehen kann, und bindest daran eine Routine, die das Popup-Menü mit der Menü-Methode .post(x, y) an der Position (x, y) darstellt.
danke das mit dem popup menu funktioniert bereits aber ich hatte gern sowas wie bei menus einfach also ist das evtl. ein toplevel menu?
ich habe leider nirgends code bezueglich eines toplevel menus gefunden...
das bloede ist dass beim button menu sich das menu je nach mausposition oeffnet. ich wills aber fest verankert haben....geht das?
danke fuer Hilfe...
ich habe leider nirgends code bezueglich eines toplevel menus gefunden...
das bloede ist dass beim button menu sich das menu je nach mausposition oeffnet. ich wills aber fest verankert haben....geht das?
danke fuer Hilfe...
Du kannst ja .post beliebige, also auch fixe Koordinaten übergeben, so dass das Menü immer an derselben Position geöffnet wird.
Eine gute Einführung zu Tkinter findet sich in http://www.pythonware.com/library/tkinter/introduction/. Hier wird auch das Menu-Widget beschrieben mit Beispielen u.a. für ein Toplevel-Window
Eine gute Einführung zu Tkinter findet sich in http://www.pythonware.com/library/tkinter/introduction/. Hier wird auch das Menu-Widget beschrieben mit Beispielen u.a. für ein Toplevel-Window
Zuletzt geändert von HWK am Montag 17. Juli 2006, 21:39, insgesamt 1-mal geändert.
- Hannes-Spz
- User
- Beiträge: 123
- Registriert: Sonntag 7. August 2005, 22:42
nen kumpel von mir hat das problem mehr oder weniger aus ZUFALL anders gelöst:
er hat ein menü aus buttons vorgeschrieben und das frame, in dem sie lagen immer wieder neu packen oder gridden lassen...
mit widget.pack_forget() oder .grid_forget() oder .place_forget()
geht das ganze dann wieder weg, sodass man wieder neu packen lassen kann
und wenn du ja place nimmst, stellt es das frame einfach über alle an dieser stelle vorhandenen widgets drüber, sodass es dann wirklich wie eine art menü aussieht....
vl. nur als anregung
lg hannes
er hat ein menü aus buttons vorgeschrieben und das frame, in dem sie lagen immer wieder neu packen oder gridden lassen...
mit widget.pack_forget() oder .grid_forget() oder .place_forget()
geht das ganze dann wieder weg, sodass man wieder neu packen lassen kann

und wenn du ja place nimmst, stellt es das frame einfach über alle an dieser stelle vorhandenen widgets drüber, sodass es dann wirklich wie eine art menü aussieht....
vl. nur als anregung

lg hannes
Hallo,
villeicht meinst du sowas hier!
Gruss
pyStyler
edit: oh sorry das hast warscheinlich nicht gemeint ! Habe in deinem Post was falsch verstanden gehabt.
villeicht meinst du sowas hier!
Code: Alles auswählen
#!/usr/bin/python
from Tkinter import *
class Fenster_Toplevel:
def __init__(self):
self.fenster=Tk()
self.fenster.geometry('200x200+250+250')
self.button=Button(self.fenster,
text='Toplevel',
command=self.top
)
self.button.pack(side=LEFT)
self.button2=Button(self.fenster,
text='close',
command=self.closeFenster
)
self.button2.pack(side=LEFT)
self.fenster.mainloop()
def closeFenster(self):
self.fenster.destroy()
def top(self):
self.toplevel=Toplevel(self.fenster)
self.toplevel.geometry('200x200+290+350')
self.lbl=Label(self.toplevel, text='Toplevel! ')
self.lbl.pack()
self.but=Button(self.toplevel, text='close', command=self.close)
self.but.pack()
self.toplevel.grab_set()
self.toplevel.focus_set()
def close(self):
self.toplevel.destroy()
Fenster_Toplevel()
pyStyler
edit: oh sorry das hast warscheinlich nicht gemeint ! Habe in deinem Post was falsch verstanden gehabt.
ein versuch noch.
Code: Alles auswählen
from Tkinter import *
class Main(object):
def __init__(self):
self.fenster=Tk()
self.fenster.geometry('600x400+105+255')
self.menuBar = Frame(self.fenster, relief = FLAT, bd=2)
self.menuBar.pack(side=TOP, fill= X , pady=10)
self.scrollbar=Scrollbar(self.fenster)
self.scrollbar.pack(side=RIGHT, fill=Y)
self.text=Text(self.fenster, bg='white',
width=90, height=30,
yscrollcommand=(self.scrollbar, 'set'
)
)
self.text.pack( side=LEFT, fill=BOTH, expand=YES )
self.scrollbar.config(command=self.text.yview)
self.fileMenu()
self.fenster.mainloop()
def fileMenu(self):
mButton=Menubutton(self.menuBar, text='File',
relief=GROOVE,
width=8, height=2
)
mButton.pack(side=LEFT)
menu=Menu(mButton, tearoff=0 )
menu.add_command(label='close', command=self.close)
mButton.configure(menu=menu)
return mButton
def close(self):
self.fenster.destroy()
m=Main()
Dasselbe geht auch mit einem Popup-Menü:
Als Vorteil erscheint es mir aber, dass man die Position des Menüs wirklich beliebig festlegen kann.
Ergänzend:
Für das Text-Fenster mit Y-Scroller ist ScrolledText einfacher.
MfG
HWK
Code: Alles auswählen
from ScrolledText import ScrolledText
from Tkinter import *
class Main(object):
def __init__(self):
self.fenster=Tk()
self.fenster.geometry('600x400+105+255')
self.menuBar = Frame(self.fenster, relief = FLAT, bd=2)
self.menuBar.pack(side=TOP, fill=X , pady=10)
self.mButton=Button(self.menuBar, text='File', relief=GROOVE,
width=8, height=2, command=self.popup)
self.mButton.pack(side=LEFT)
self.menu=Menu(self.fenster, tearoff=0)
self.menu.add_command(label='close', command=self.close)
self.text=ScrolledText(self.fenster, bg='white', width=90, height=30)
self.text.pack(side=LEFT, fill=BOTH, expand=YES)
self.fenster.mainloop()
def popup(self):
self.menu.post(self.mButton.winfo_rootx(),
self.mButton.winfo_rooty()+self.mButton.winfo_height())
def close(self):
self.fenster.destroy()
m=Main()
Ergänzend:
Für das Text-Fenster mit Y-Scroller ist ScrolledText einfacher.
MfG
HWK