Как совместить выпадающее меню с меню верхнего уровня в tkinter - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь сделать простой текстовый редактор с меню и создал раскрывающееся меню, но в конце меню я хочу просто «О» без раскрывающегося списка, и я не могу этого сделать.Каждый раз, когда я хочу добавить его, программа работает, но она не появляется на экране, как я могу это сделать?

Вот мой код:

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()

1 Ответ

0 голосов
/ 25 октября 2018

Вы присоединяете команду «О программе» к self.aboutmenu, но self.aboutmenu не присоединена к строке меню.

Вам необходимо добавить меню «О программе» в панель меню.Обычно это происходит в пункте меню «Справка», а не «О программе».Большинство рекомендаций по пользовательскому интерфейсу настоятельно не рекомендуют вводить команды непосредственно в меню, так как пользователи ожидают увидеть меню, когда щелкают что-либо в меню.

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

Если вы настаиваете на том, чтобы команда "about" была включенаВы можете попробовать меню, а не раскрывающийся список.Я не уверен, что 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 видит меню .menubar.apple на Macintosh, содержимое этого меню составляет первые пункты меню приложения, когда перед ним находится окно, содержащее строку меню.После всех элементов, определенных в Tk, в меню будет разделитель, за которым следуют все стандартные пункты меню приложения.

Когда Tk видит меню «Справка» в Macintosh, его содержимое добавляется в стандартное меню «Справка».справа от строки меню пользователя, когда панель меню находится впереди.Первые элементы в меню предоставляются Mac OS X.

Когда Tk видит системное меню в Windows, его элементы добавляются в системное меню, к которому присоединена строка меню.Это меню имеет значок, представляющий пробел, и может быть вызвано с помощью мыши или путем нажатия Alt + пробел.Из-за ограничений в API Windows любые изменения шрифтов, цветов, изображений, растровых изображений или отрывных изображений не будут отображаться в системном меню.

Когда Tk видит меню справки в X, совместимость с Windows и Motif включенаменю перемещено, чтобы быть последним в строке меню и выровнено по правому краю.Совместимость меню Motif включается установкой опции Tk * Menu.useMotifHelp в значение true или вызовом меню tk :: classic :: restore.

...