Tkinter文本编辑器不显示菜单小部件

时间:2013-06-30 09:12:51

标签: python menu widget tkinter

我试图通过python重新制作记事本问题是我的菜单无法打包。我正在使用tkinter模块。到目前为止,尝试过的产品应该是一个文本框,上面有一个菜单栏。点击每个菜单按钮应该拉出一个平均值。我没有为每个菜单选项编写任何函数,所以我知道我的所有“add_command”都没有命令

from tkinter import *
import tkinter.messagebox
import tkinter

# Text Box
class ScrolledText(Frame):
        def __init__(self, parent=None, text='', file=None):
                Frame.__init__(self, parent)
        self.pack(expand=YES, fill=X)               #make expandable
        self.makewidgets()
        self.settext(text,file)

    def makewidgets(self):
        sbar = Scrollbar(self)
        text = Text(self, relief=SUNKEN)
        sbar.config(command=text.yview)                 # xlink sbar and text
        text.config(yscrollcommand=sbar.set)            # moving one moves other
        sbar.pack(side=RIGHT, fill=Y)                   #pack first-clip last
        text.pack(side=LEFT, expand=YES, fill=BOTH)     # text clipped first
        self.text = text

def settext(self, text='', file=None):
    if file:
        text = open(file, 'r').read()
    self.text.delete('1.0', END)
    self.text.insert('1.0', text)
    self.text.mark_set(INSERT, '1.0')
    self.text.focus()

def gettext(self):
    return self.text.get('1.0', END+'-1c')

# Menu Bar
class SimpleEditor(ScrolledText):
    def __init__(self, parent=None, file=None):
        frm = Frame(parent)
        frm.pack(fill=X)
        #Menus
        mf = Menubutton(root, text='File', width=5, activebackground='lightblue')
        mf.grid(row=0, column=0, sticky=W)
        mf.menu = Menu(mf, tearoff=0)
        mf["menu"] = mf.menu

        me = Menubutton(root, text='Edit', width=5, activebackground='lightblue')
        me.grid(row=0, column=1)
        me.menu = Menu(me, tearoff=0)
        me["menu"] = me.menu

        mo = Menubutton(root, text='Format', width=8, activebackground='lightblue')
        mo.grid(row=0, column=2, sticky=W)
        mo.menu = Menu(mo, tearoff=0)
        mo["menu"] = mo.menu

        mv = Menubutton(root, text='File', width=5, activebackground='lightblue')
        mv.grid(row=0, column=3, sticky=W)
        mv.menu = Menu(mv, tearoff=0)
        mv["menu"] = mv.menu

        mh = Menubutton(root, text='Help', width=5, activebackground='lightblue')
        mh.grid(row=0, column=4, sticky=W)
        mh.menu = Menu(mh, tearoff=0)
        mh["menu"] = mh.menu

        # File Options
        mf.menu.add_command(label='New          Ctrl+N', activebackground='lightblue')
        mf.menu.add_command(label='Open...      Ctrl+O', activebackground='lightblue')
        mf.menu.add_command(label='Save         Ctrl+S', activebackground='lightblue')
        mf.menu.add_command(label='Save as...', activebackground='lightblue')
        mf.menu.add_separator()
        mf.menu.add_command(label='Page Setup...', activebackground='lightblue')
        mf.menu.add_command(label='Print...      Ctrl+P', activebackground='lightblue')
        mf.menu.add_separator()
        mf.menu.add_command(label='Exit', activebackground='lightblue')

        # Edit Options
        me.menu.add_command(label='Undo         Ctrl+Z', activebackground='lightblue')
        me.menu.add_separator()
        me.menu.add_command(label='Cut          Ctrl+X', activebackground='lightblue')
        me.menu.add_command(label='Copy         Ctrl+C', activebackground='lightblue')
        me.menu.add_command(label='Paste        Ctrl+V', activebackground='lightblue')
        me.menu.add_command(label='Delete          Del', activebackground='lightblue')
        me.menu.add_separator()
        me.menu.add_command(label='Find         Ctrl+F', activebackground='lightblue')
        me.menu.add_command(label='Find Next        F3', activebackground='lightblue')
        me.menu.add_command(label='Replace...   Ctrl+H', activebackground='lightblue')
        me.menu.add_command(label='Go To...     Ctrl+G', activebackground='lightblue')
        me.menu.add_separator()
        me.menu.add_command(label='Select All   Ctrl+A', activebackground='lightblue')
        me.menu.add_command(label='Time/Date        F5', activebackground='lightblue')

        # Format Options
        mo.menu.add_checkbutton(label='Word Wrap', activebackground='lightblue')
        mo.menu.add_command(label='Font...', activebackground='lightblue')

        # View Options
        mv.menu.add_checkbutton(label='Status Bar', activebackground='lightblue')

        # Help Options
        mh.menu.add_command(label='View Help', activebackground='lightblue')
        mh.menu.add_separator()
        mh.menu.add_command(label='About Notepad', activebackground='lightblue')


if __name__ == '__main__':
    root = Tk()
    if len(sys.argv) > 1:
        ScrolledText(file=sys.argv[1]).mainloop()
    else:
        ScrolledText(text='').mainloop()
    root.mainloop()

1 个答案:

答案 0 :(得分:0)

将菜单按钮作为滚动文本小部件的子项,高度异常。制作菜单栏的正确方法是创建菜单(不是菜单栏),然后将菜单附加到根目录:

    menubar = tk.Menu(root)
    root.configure(menu=menubar)
    fileMenu = tk.Menu(menubar)
    menubar.add_cascade(label="File", menu=fileMenu)
    ...

这样做可以保证您获得适当的原生菜单。