Stronę tą wyświetlono już: 8751 razy
Menu jest częstym elementem wielu aplikacji, tak więc przydałoby się nauczyć jak takie menu wstawić do swojego programu utworzonego za pomocą modułu tkinter. Oto prosty przykład pokazujący proces tworzenia takiego menu:
import tkinter as tk
class Application:
def __init__(self):
self.window = tk.Tk()
self.window.title("Dodawanie menu")
self.window.geometry("500x500")
self.option_write = tk.Label(self.window, text = "nie wybrano rzadnej opcji") # pomocnicza kontrolka typu label, która będzie wyświetlała jaki element menu został kliknięty
self.option_write.place(x = 10, y = 10)
self.menu = tk.Menu(self.window) # tworzenie menu
cascade = tk.Menu(self.menu) # tworzenie kaskady menu
self.menu.add_cascade(label="Program", menu = cascade) # dodanie kaskady do menu głównego
cascade.add_command(label = "opcja 1", command = self.option1) # dodanie pierwszej opcji do podmenu
cascade.add_command(label = "opcja 2", command = self.option2) # drugiej opcji
cascade2 = tk.Menu(cascade, tearoff = 0) # dodanie kaskady do podmenu
cascade.add_cascade(label = "Podmenu", menu = cascade2) # przypisanie kaskady do podmenu
cascade2.add_radiobutton(label = "opcja 1", command = self.suboption1) # dodaję opcję radiobutton
cascade2.add_radiobutton(label = "opcja 2", command = self.suboption2) # dodaję kolejny radiobutton
cascade2.add_separator()
cascade2.add_checkbutton(label = "opcja 3", command = self.suboption3) # dodaję chceckbox-a
self.window.config( menu = self.menu) # na koniec przypisuję menu do okna programu
self.window.bind("<Button-1>", self.menuPost) # podpinam metodę menuPost pod lewy przycisk myszy
self.window.mainloop()
def option1(self):
self.option_write.config(text = "Opcja 1")
def option2(self):
self.option_write.config(text = "Opcja 2")
def suboption1(self):
self.option_write.config(text = "Podopcja 1")
def suboption2(self):
self.option_write.config(text = "Podopcja 2")
def suboption3(self):
self.option_write.config(text = "Podopcja 3")
def menuPost(self, event):
self.menu.post(event.x_root, event.y_root) # wyświetlam menu w oknie programu po kliknięciu lewego przycisku myszy (menu kontekstowe)
app = Application()
Na poniższym rysunku widoczny jest widok wycinka okna programu z dodanym menu. Warto zwrócić uwagę na przerywaną linię na górze menu, po której kliknięciu menu jest odrywane i wyświetlane w oddzielnym oknie.

Rys. 1
Wycinek widoki programu z menu utworzonym przy użyciu modułu tkinter. Widoczna u góry linia jest spowodowana tym, że w linijce 14 opcja tearoff nie została ustawiona na 0. Kliknięcie na przerywanej linii powoduje oderwanie menu i wyświetlenie go w oddzielnym okienku.
To samo menu można wywołać jako menu kontekstowe klikając lewym przyciskiem myszy w obszarze okna programu, co jest spowodowane podpięciem pod to zdarzenie metody menuPost. W tejże metodzie wywoływane jest menu w danym punkcie ekranu dzięki metodzie post.