menu auf rechtsklick

Fragen zu Tkinter.
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

menu auf rechtsklick

Beitragvon pr0stAta » Freitag 17. Juni 2005, 08:56

Halli Hallo,
ich habe die suchfunktion schon wie ein blöder zu tode
bedient und konnte nichts finden. hat jemand mal
ein musterbeispiel für ein menü was sich auf rechtsklick öffnet?
also z.b. bei dateien wie kopieren, einfügen ausschneiden oder
bei fenster maximieren, minimieren und wiederherstellen.

ich könnte wohl über toplevel ein neues fenster auf rechtsklick erzeugen lassen aber das suche ich nicht :>
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 17. Juni 2005, 09:19

Hi!

Code: Alles auswählen

from Tkinter import *

root = Tk()

l = Label(root, text="Right-click to display menu", width=40, height=20)
l.pack()

popup = Menu(root, tearoff=0)
popup.add_command(label="New")
popup.add_command(label="Save")
popup.add_separator()
popup.add_command(label="Quit")

def do_popup(event):
    # entweder
    try:
        popup.tk_popup(event.x_root, event.y_root, 0)
    finally:
        popup.grab_release()
    # oder
    #popup.post(event.x_root, event.y_root)

l.bind("<Button-3>", do_popup)

root.mainloop()

Bei # entweder bleibt das Menü nur so lange offen, wie Du die rechte Maustaste drückst, bei # oder bleibts ewig ;)

Gruß, mawe
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Beitragvon pr0stAta » Freitag 17. Juni 2005, 09:45

also das klappt schonmal super danke :D
aber dadurch entsteht ein kleines neues problem ^^
in meiner listbox sind dateinamen als einträge. durch rechtsklick sollen
dann halt die möglichen optionen wie kopieren etc kommen.
doch leider setzt er den anchor auf die einträge nur mit linksklick.
habe das bis jetzt so versucht was aber nicht geht:

Code: Alles auswählen

self.listbox_unten.bind('<Button-3>', self.openFileMenu)

  def openFileMenu(self, event):
    popup = Menu(untenframe, tearoff=0)
    popup.add_command(label="Copy")
    popup.add_command(label="Pase")
    popup.add_separator()
    popup.add_command(label="Cut")
    try:
        popup.tk_popup(event.x_root, event.y_root, 0)
        self.listbox_unten.select_anchor(int(self.listbox_unten.nearest(int(event.y_root))))
    finally:
        popup.grab_release()

eben ist mir aufgefallen das nearest anscheinend nen index und keine y-koordinate braucht ^^
desweiteren öffnet sich das menü beim rechtsklick, nicht wie beim
normalen windows mit der linken ecke am mauszeiger sondern
mitten drin.
hoffe das war verständlich :>

*edit* ok problem 1 dass das menu nicht mit der linken oberen ecke am
mauszeiger ist habe ich gelöst. einfach +32 an x_root und +10 an y_root
rangehangen :>

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder