Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from functools import partial
try:
# Tkinter for Python 2.xx
import Tkinter as tk
except ImportError:
# Tkinter for Python 3.xx
import tkinter as tk
APP_TITLE = "Menu Abfragen"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 400
APP_HEIGHT = 300
class Application(tk.Frame):
def __init__(self, master):
self.master = master
tk.Frame.__init__(self, master)
self.obj_canvas_master = tk.Canvas(master, width=500, height=300,
relief="sunken", bd=3)
self.obj_canvas_master.pack()
self.obj_frame = tk.Frame(self.obj_canvas_master, background="blue",
bd=6, relief="groove", width=300, height=200, padx=3, pady=3)
self.obj_canvas_master.create_window(0, 0, window=self.obj_frame,
anchor="nw", tags="self.frame")
# attach popup to canvas
self.obj_frame.bind("<Button-1>", self.popup)
# create a popup menu
mainmenu = tk.Menu(self.obj_frame)
menu = tk.Menu(mainmenu, tearoff=0, relief="raised", bd=3,
activeforeground="red", activebackground="yellow")
mainmenu.add_command(label="Spieler neu", command=self.hello)
submenu_player_edit = tk.Menu(menu, tearoff=0)
submenu_player_edit.add_command(label="Name ändern", command=self.hello)
submenu_team_choice = tk.Menu(submenu_player_edit, tearoff=0)
for i in range(1, 17):
'''
#~~ Variante OP
# Funktioniert: Typischer gewöhnungsbedürftige 'lambda' Syntax
submenu_team_choice.add_command(label="Team " + str(i),
command=lambda i=i: self.auswahl(str(i)))
#~~ Variante sanfu
# Funktioniert nicht: Hier wird immer der letzte Team-Index
# als Argument übergeben
submenu_team_choice.add_command(label="Team {}".format(i),
command=lambda: self.auswahl(i))
'''
#~~ Variante Sirius3, __deets__ (und wuf)
# Funktioniert: Ein etwas mehr verständlicherer 'partial' Syntax
submenu_team_choice.add_command(label="Team {}".format(i),
command=partial(self.auswahl, i))
submenu_player_edit.add_cascade(label="Team wählen", menu=submenu_team_choice)
submenu_player_edit.add_command(label="Handycap wählen", command=self.hello)
menu.add_cascade(label="Spieler anpassen", menu=submenu_player_edit)
submenu_player_move = tk.Menu(menu, tearoff=0)
submenu_player_move.add_command(label="hoch", command=self.hello)
submenu_player_move.add_command(label="runter", command=self.hello)
menu.add_cascade(label="Spieler verschieben", menu=submenu_player_move,
state=tk.DISABLED)
submenu_player_delete = tk.Menu(menu, tearoff=0)
submenu_player_delete.add_command(label="ja", command=self.hello)
submenu_player_delete.add_command(label="nein", command=self.hello)
menu.add_cascade(label="Spieler löschen", menu=submenu_player_delete)
menu.add_separator()
menu.add_command(label="Statistik", command=self.hello)
menu.add_separator()
menu.add_command(label="abbrechen")
self.menu = menu
def popup(self, event):
self.menu.post(event.x_root, event.y_root)
#self.menu.post(100, 100)
def hello(self):
print("hello!")
def auswahl(self, number):
print("Dies ist Team {}".format(number))
def main():
app_win = tk.Tk()
app_win.title(APP_TITLE)
app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
Application(app_win).pack(fill='both', expand=True)
app_win.mainloop()
if __name__ == '__main__':
main()