📄 menu-all-types-of-entries.py
字号:
from Tkinter import *# some vocabulary to keep from getting confused. This terminology # is something I cooked up for this file, but follows the man pages # pretty closely# # # # This is a MENUBUTTON# V# +-------------+# | |# # +------------++------------++------------+# | || || |# | File || Edit || Options | <-------- the MENUBAR# | || || |# +------------++------------++------------+# | New... |# | Open... |# | Print |# | | <-------- This is a MENU. The lines of text in the menu are# | | MENU ENTRIES# | +---------------+# | Open Files > | file1 | # | | file2 |# | | another file | <------ this cascading part is also a MENU# +----------------| |# | |# | |# | |# +---------------+# some miscellaneous callbacksdef new_file(): print "opening new file"def open_file(): print "opening OLD file"def print_something(): print "picked a menu item"anchovies = 0def print_anchovies(): global anchovies anchovies = not anchovies print "anchovies?", anchoviesdef makeCommandMenu(): # make menu button Command_button = Menubutton(mBar, text='Simple Button Commands', underline=0) Command_button.pack(side=LEFT, padx="2m") # make the pulldown part of the File menu. The parameter passed is the master. # we attach it to the button as a python attribute called "menu" by convention. # hopefully this isn't too confusing... Command_button.menu = Menu(Command_button) # just to be cute, let's disable the undo option: Command_button.menu.add_command(label="Undo") # undo is the 0th entry... Command_button.menu.entryconfig(0, state=DISABLED) Command_button.menu.add_command(label='New...', underline=0, command=new_file) Command_button.menu.add_command(label='Open...', underline=0, command=open_file) Command_button.menu.add_command(label='Different Font', underline=0, font='-*-helvetica-*-r-*-*-*-180-*-*-*-*-*-*', command=print_something) # we can make bitmaps be menu entries too. File format is X11 bitmap. # if you use XV, save it under X11 bitmap format. duh-uh.,.. Command_button.menu.add_command( bitmap="info") #bitmap='@/home/mjc4y/dilbert/project.status.is.doomed.last.panel.bm') # this is just a line Command_button.menu.add('separator') # change the color Command_button.menu.add_command(label='Quit', underline=0, background='red', activebackground='green', command=Command_button.quit) # set up a pointer from the file menubutton back to the file menu Command_button['menu'] = Command_button.menu return Command_buttondef makeCascadeMenu(): # make menu button Cascade_button = Menubutton(mBar, text='Cascading Menus', underline=0) Cascade_button.pack(side=LEFT, padx="2m") # the primary pulldown Cascade_button.menu = Menu(Cascade_button) # this is the menu that cascades from the primary pulldown.... Cascade_button.menu.choices = Menu(Cascade_button.menu) # ...and this is a menu that cascades from that. Cascade_button.menu.choices.wierdones = Menu(Cascade_button.menu.choices) # then you define the menus from the deepest level on up. Cascade_button.menu.choices.wierdones.add_command(label='avacado') Cascade_button.menu.choices.wierdones.add_command(label='belgian endive') Cascade_button.menu.choices.wierdones.add_command(label='beefaroni') # definition of the menu one level up... Cascade_button.menu.choices.add_command(label='Chocolate') Cascade_button.menu.choices.add_command(label='Vanilla') Cascade_button.menu.choices.add_command(label='TuttiFruiti') Cascade_button.menu.choices.add_command(label='WopBopaLoopBapABopBamBoom') Cascade_button.menu.choices.add_command(label='Rocky Road') Cascade_button.menu.choices.add_command(label='BubbleGum') Cascade_button.menu.choices.add_cascade( label='Wierd Flavors', menu=Cascade_button.menu.choices.wierdones) # and finally, the definition for the top level Cascade_button.menu.add_cascade(label='more choices', menu=Cascade_button.menu.choices) Cascade_button['menu'] = Cascade_button.menu return Cascade_buttondef makeCheckbuttonMenu(): global fred # make menu button Checkbutton_button = Menubutton(mBar, text='Checkbutton Menus', underline=0) Checkbutton_button.pack(side=LEFT, padx='2m') # the primary pulldown Checkbutton_button.menu = Menu(Checkbutton_button) # and all the check buttons. Note that the "variable" "onvalue" and "offvalue" options # are not supported correctly at present. You have to do all your application # work through the calback. Checkbutton_button.menu.add_checkbutton(label='Pepperoni') Checkbutton_button.menu.add_checkbutton(label='Sausage') Checkbutton_button.menu.add_checkbutton(label='Extra Cheese') # so here's a callback Checkbutton_button.menu.add_checkbutton(label='Anchovy', command=print_anchovies) # and start with anchovies selected to be on. Do this by # calling invoke on this menu option. To refer to the "anchovy" menu # entry we need to know it's index. To do this, we use the index method # which takes arguments of several forms: # # argument what it does # ----------------------------------- # a number -- this is useless. # "last" -- last option in the menu # "none" -- used with the activate command. see the man page on menus # "active" -- the currently active menu option. A menu option is made active # with the 'activate' method # "@number" -- where 'number' is an integer and is treated like a y coordinate in pixels # string pattern -- this is the option used below, and attempts to match "labels" using the # rules of Tcl_StringMatch Checkbutton_button.menu.invoke(Checkbutton_button.menu.index('Anchovy')) # set up a pointer from the file menubutton back to the file menu Checkbutton_button['menu'] = Checkbutton_button.menu return Checkbutton_buttondef makeRadiobuttonMenu(): # make menu button Radiobutton_button = Menubutton(mBar, text='Radiobutton Menus', underline=0) Radiobutton_button.pack(side=LEFT, padx='2m') # the primary pulldown Radiobutton_button.menu = Menu(Radiobutton_button) # and all the Radio buttons. Note that the "variable" "onvalue" and "offvalue" options # are not supported correctly at present. You have to do all your application # work through the calback. Radiobutton_button.menu.add_radiobutton(label='Republican') Radiobutton_button.menu.add_radiobutton(label='Democrat') Radiobutton_button.menu.add_radiobutton(label='Libertarian') Radiobutton_button.menu.add_radiobutton(label='Commie') Radiobutton_button.menu.add_radiobutton(label='Facist') Radiobutton_button.menu.add_radiobutton(label='Labor Party') Radiobutton_button.menu.add_radiobutton(label='Torie') Radiobutton_button.menu.add_radiobutton(label='Independent') Radiobutton_button.menu.add_radiobutton(label='Anarchist') Radiobutton_button.menu.add_radiobutton(label='No Opinion') # set up a pointer from the file menubutton back to the file menu Radiobutton_button['menu'] = Radiobutton_button.menu return Radiobutton_buttondef makeDisabledMenu(): Dummy_button = Menubutton(mBar, text='Dead Menu', underline=0) Dummy_button.pack(side=LEFT, padx='2m') # this is the standard way of turning off a whole menu Dummy_button["state"] = DISABLED return Dummy_button##################################################### Main starts here ...root = Tk()# make a menu barmBar = Frame(root, relief=RAISED, borderwidth=2)mBar.pack(fill=X)Command_button = makeCommandMenu()Cascade_button = makeCascadeMenu()Checkbutton_button = makeCheckbuttonMenu()Radiobutton_button = makeRadiobuttonMenu()NoMenu = makeDisabledMenu()# finally, install the buttons in the menu bar. # This allows for scanning from one menubutton to the next.mBar.tk_menuBar(Command_button, Cascade_button, Checkbutton_button, Radiobutton_button, NoMenu)root.title('menu demo')root.iconname('menu demo')root.mainloop()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -