Trong phần này chúng ta sẽ học cách tạo menu trong Tkinter.
Ví dụ
from tkinter import Frame, Tk, Menu class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Simple Menu") menuBar = Menu(self.parent) self.parent.config(menu=menuBar) fileMenu = Menu(menuBar) fileMenu.add_command(label="Exit", command=self.onExit) menuBar.add_cascade(label="File", menu=fileMenu) def onExit(self): self.quit() root = Tk() root.geometry("250x150+300+300") app = Example(root) root.mainloop()
Đoạn code trên tạo một cửa sổ có một menu, trong menu này có nút Exit, bấm vào nút này thì thoát chương trình.
menubar = Menu(self.parent) self.parent.config(menu=menubar)
Để hiển thị các menu thì đầu tiên chúng ta phải tạo một menu bar trước. Chúng ta tạo menu bar từ lớp Menu
.
fileMenu = Menu(menubar)
Tiếp theo chúng ta tạo menu File cũng từ lớp Menu
.
fileMenu.add_command(label="Exit", command=self.onExit)
Để thêm các item vào một menu thì chúng ta dùng phương thức add_command()
, ở trên chúng ta tạo item Exit
và cho item này gọi đến phương thức
onExit().
menubar.add_cascade(label="File", menu=fileMenu)
Sau khi tạo xong thì chúng ta gắn menu File vào menu bar bằng phương thức
add_cascade()
.
Tạo menu con
Ví dụ dưới đây sẽ tạo một menu con từ một menu cha.
from Tkinter import Tk, Frame, Menu class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Submenu") menubar = Menu(self.parent) self.parent.config(menu=menubar) fileMenu = Menu(menubar) submenu = Menu(fileMenu) submenu.add_command(label="New feed") submenu.add_command(label="Bookmarks") submenu.add_command(label="Mail") fileMenu.add_cascade(label='Import', menu=submenu) fileMenu.add_separator() fileMenu.add_command(label="Exit", command=self.onExit) menubar.add_cascade(label="File", menu=fileMenu) def onExit(self): self.quit() root = Tk() root.geometry("250x150+300+300") app = Example(root) root.mainloop()
Chúng ta tạo menu File, trong menu này có 1 item, 1 separator (đường kẻ ngang phân cách) và 1 menu con. Trong menu con có 3 item khác.
submenu = Menu(fileMenu) submenu.add_command(label="New feed") submenu.add_command(label="Bookmarks") submenu.add_command(label="Mail")
Chúng ta tạo menu con cũng giống như tạo một menu bình thường từ lớp Menu
.
fileMenu.add_cascade(label='Import', menu=submenu)
Chúng ta thêm menu con bằng cách gọi phương thức add_cascade từ menu cha và truyền tham chiếu đến đối tượng menu con vào tham số menu
. Như vậy các menu từ menu bar cho đến submenu đều được tạo ra từ lớp Menu.
Chỉ khác là menu bar chính là menu gốc, được gắn vào cửa sổ chính.
fileMenu.add_separator()
Để hiển thị một separator (đường kẻ ngang) thì chúng ta gọi phương thức add_separator().
Popup menu
Popup menu hay còn được gọi là menu ngữ cảnh là menu được hiện ra khi click chuột lên cửa sổ.
from Tkinter import Tk, Frame, Menu class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Popup menu") self.menu = Menu(self.parent, tearoff=0) self.menu.add_command(label="Beep", command=self.bell()) self.menu.add_command(label="Exit", command=self.onExit) self.parent.bind("<Button-3>", self.showMenu) self.pack() def showMenu(self, e): self.menu.post(e.x_root, e.y_root) def onExit(self): self.quit() root = Tk() root.geometry("250x150+300+300") app = Example(root) root.mainloop()
Trong ví dụ trên chúng tạo popup menu có 2 item khi click chuột phải lên cửa sổ.
self.menu = Menu(self.parent, tearoff=0)
Ban đầu chúng ta cũng tạo một đối tượng Menu
như menu bình thường. Tham số tearoff=0
sẽ tắt chế độ hiển thị menu trên một cửa sổ riêng.
self.parent.bind("<Button-3>", self.showMenu)
Dòng code trên gắn sự kiện click chuột phải (<Button-3>
) vào phương thức showMenu()
.
def showMenu(self, e): self.menu.post(e.x_root, e.y_root)
Trong phương thức showMenu()
, chúng ta gọi phương thức self.menu.post(x, y)
để hiển thị popup menu tại vị trí được chỉ định trên cửa sổ. Tham số e
là đối tượng của sự kiện click chuột.