Dodawanie menu do programu w tkinter

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 8050 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.

Wycinek widoki programu z menu utworzonym przy użyciu modułu tkinter
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.

Propozycje książek