0

我尝试用菜单栏制作一个简单的文本编辑器,并创建了一个下拉菜单,但在菜单末尾我只想简单地“关于”,没有任何下拉列表,我做不到。每次我想添加它时程序正在运行但它没有出现在屏幕上,我该怎么做?

这是我的代码:

from tkinter import *
from tkinter import Menu, scrolledtext
from tkinter import messagebox

class GUI(Frame):
    def __init__(self):
        super().__init__()
        self.pack()
        self.drop_down_menu()
        #self.toolbar()
        self.text_area()


###GUI Drop-down menu
    def drop_down_menu(self):
        self.menu = Menu(root)
        root.config(menu= self.menu)

        self.submenu = Menu(self.menu)
        self.menu.add_cascade(label = "File", menu = self.submenu)
        self.submenu.add_command(label = "New", command = "")
        self.submenu.add_command(label = "Open", command = "" )
        self.submenu.add_command(label = "Open Recent", command = "")
        self.submenu.add_separator()
        self.submenu.add_command(label = "Save", command = "")
        self.submenu.add_command(label = "Duplicate", command = "" )
        self.submenu.add_command(label = "Rename", command = "")
        self.submenu.add_command(label = "Move to", command = "")
        self.submenu.add_separator()
        self.submenu.add_command(label = "Exit", command = self.exit_function)

        self.editmenu = Menu(self.menu)
        self.menu.add_cascade(label = "Edit", menu = self.editmenu)
        self.editmenu.add_command(label = "Undo", command = "")
        self.editmenu.add_command(label = "Redo", command = "" )
        self.editmenu.add_separator()
        self.editmenu.add_command(label = "Cut", command = "")
        self.editmenu.add_command(label = "Copy", command = "")
        self.editmenu.add_command(label = "Paste", command = "")
        self.editmenu.add_command(label = "Delete", command = "")
        self.editmenu.add_separator()
        self.editmenu.add_command(label = "Find", command = "")

        self.viewmenu = Menu(self.menu)
        self.menu.add_cascade(label = "View", menu = self.viewmenu)
        self.viewmenu.add_command(label = "Zoom in", command = "")
        self.viewmenu.add_command(label = "Zoom out", command = "" )
        self.viewmenu.add_separator()
        self.viewmenu.add_command(label = "Full Screen", command = "")

        self.aboutmenu = Menu(self.menu)
        self.aboutmenu.add_command(label="About", command="")




    # def toolbar(self):
    #     self.toolbar = Frame(root, bg="#DCDCDC")
    #     self.toolbar.pack(side = TOP, fill = X)
    #
    #
    #     self.paragraph_button = Button(self.toolbar, text="Paragraph style", command="")
    #     self.paragraph_button.grid(row = 1, column = 0, columnspan= 3)
    #     self.font_button = Button(self.toolbar, text="Font-family", command="", height=1, width=3)
    #     self.font_button.grid(row=1, column=4)
    #     self.typeface_button = Button(self.toolbar, text="Typeface", command="", height=1, width=3)
    #     self.typeface_button.grid(row=1, column=5)
    #     self.font_size_button = Button(self.toolbar, text="Font size", command="", height=1, width=3)
    #     self.font_size_button.grid(row=1, column=6)
    #     self.font_color_button = Button(self.toolbar, text="Font color", command="", height=1, width=3)
    #     self.font_color_button.grid(row=1, column=7)
    #     self.bg_color_button = Button(self.toolbar, text="Background color", command="", height=1, width=3)
    #     self.bg_color_button.grid(row=1, column=8)
    #     self.bold_text_button = Button(self.toolbar, text="Bold text", command="", height=1, width=3)
    #     self.bold_text_button.grid(row=1, column=9)
    #     self.italicise_text_button = Button(self.toolbar, text="Italicise text", command="", height=1, width=3)
    #     self.italicise_text_button.grid(row=1, column=10)
    #     self.underline_text_button = Button(self.toolbar, text="Underline text", command="", height=1, width=3)
    #     self.underline_text_button.grid(row=1, column=11)
    #
    #     self.left_align_button = Button(self.toolbar, text="Align to left", command="", height=1, width=3)
    #     self.left_align_button.grid(row=1, column=12)
    #     self.centere_text_button = Button(self.toolbar, text="Centere text", command="", height=1, width=3)
    #     self.centere_text_button.grid(row=1, column=13)
    #     self.right_align_button = Button(self.toolbar, text="Align to right", command="", height=1, width=3)
    #     self.centere_text_button.grid(row=1, column=14)
    #     self.justify_text_button = Button(self.toolbar, text="Justify text", command="", height=1, width=3)
    #     self.justify_text_button.grid(row=1, column=15)
    #
    #     self.paragraph_spacing_button = Button(self.toolbar, text="Paragraph spacing", command="", height=1, width=3)
    #     self.paragraph_spacing_button.grid(row=1, column=16)
    #     self.paragraph_spacing_button = Button(self.toolbar, text="Paragraph spacing", command="", height=1, width=3)
    #     self.paragraph_spacing_button.grid(row=1, column=17)


    def text_area(self):
        textarea = scrolledtext.ScrolledText(root, width=100, height=50)
        textarea.pack()


    def exit_function(self):
        if messagebox.askyesno("Close the window", "Do you want to close the window?", icon='warning'):
            root.destroy()
        else:
            pass
    def about(self):
        messagebox.showinfo("About Greg's text editor", "This is the newest version of the Greg's text editor v.1.01")



root = Tk(className= " Text Editor")

app = GUI()
app.mainloop()
4

1 回答 1

1

您将“关于”命令附加到self.aboutmenu,但未self.aboutmenu附加到菜单栏。

您需要将“关于”菜单添加到菜单栏。通常,这位于“帮助”菜单项下,而不是“关于”下。大多数 UI 指南强烈建议您不要将命令直接放在菜单栏上,因为用户希望在单击菜单栏上的某些内容时看到菜单。

self.menu.add_cascade(label="Help", menu=self.aboutmenu)

如果您坚持将“关于”命令直接放在菜单栏而不是下拉菜单上,您可以尝试。我不确定 Windows 或 Mac 是否允许它,但它适用于 linux:

self.menu.add_command(label="About", command=about)

注意:在 tkinter 中有对帮助菜单的特殊处理。从规范的 tcl/tk 文档:

菜单栏中的某些菜单将被特殊处理。在 Macintosh 上,提供了对特殊应用程序和帮助菜单的访问。在 Windows 上,提供了对每个窗口中的 Windows 系统菜单的访问。在 X Windows 上,如果启用了 Motif 菜单兼容性,则可能会提供一个特殊的右对齐帮助菜单。在所有情况下,必须使用与特殊名称连接的菜单栏菜单的命令名称来创建这些菜单。因此,对于名为 .menubar 的菜单栏,在 Macintosh 上,特殊菜单将是 .menubar.apple 和 .menubar.help;在 Windows 上,特殊菜单是 .menubar.system;在 X Windows 上,帮助菜单是 .menubar.help。当 Tk 在 Macintosh 上看到 .menubar.apple 菜单时,只要包含菜单栏的窗口位于前面,该菜单的内容就会构成应用程序菜单的第一项。

当 Tk 在 Macintosh 上看到帮助菜单时,只要窗口的菜单栏在前面,菜单的内容就会附加到用户菜单栏右侧的标准帮助菜单中。菜单中的第一项由 Mac OS X 提供。

当 Tk 在 Windows 上看到系统菜单时,它的项目会附加到菜单栏所连接的系统菜单中。此菜单有一个代表空格键的图标,可以用鼠标或按 Alt+空格键来调用。由于 Windows API 的限制,任何字体更改、颜色、图像、位图或撕裂图像都不会出现在系统菜单中。

当 Tk 在 X Windows 上看到帮助菜单并且启用了 Motif 菜单兼容性时,菜单将移动到菜单栏中的最后一个并且是右对齐的。通过将 Tk 选项 *Menu.useMotifHelp 设置为 true 或调用 tk::classic::restore menu 来启用 Motif 菜单兼容性。

于 2018-10-25T15:07:51.010 回答