Есть ли различия между python2 и python3 в добавлении строки меню в Frame в tkinter? - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь перенести проект 2to3 на python и застрял в tkinter.

В python2 нет проблем с добавлением строки меню в Frame в tkinter,

, но python3произошла ошибка атрибута.(Объект Frame не имеет атрибута 'tk_menuBar')

Есть ли различия между python2 и python3 в добавлении строки меню в Frame в tkinter?

class TkMap(Map, tkinter.Tk):
""" Map with Tkinter GUI functions """
def __init__(self, cols, rows, value,
             width, height, widthMM, heightMM,
             title, menu = None, keybindings = []):
    """ TkMap extends Map and Tkinter """
    Map.__init__(self, cols, rows, widthMM, heightMM)
    tkinter.Tk.__init__(self)
    self.title(title)
    if menu == None:
        menu = [('File',[['Exit',self.destroy]])]
    keybindings.append( ("<Configure>", self.changeSize))
    self.menuButtons = {}
    self.debug = 0
    self.application = 0
    self.width = width
    self.height = height
    self.colScale = self.width / self.cols
    self.rowScale = self.height / self.rows
    self.addMenu(menu)

def addMenu(self, menu):
    """ Create a menu """
    self.mBar = tkinter.Frame(self,relief=tkinter.RAISED,borderwidth=2)
    self.mBar.pack(fill=tkinter.X)

    *for entry in menu:
        self.mBar.tk_menuBar(self.makeMenu(self.mBar, entry[0],entry[1]))*

    self.mBar.pack(side = "top")

PS.Это мой первый вопрос, поэтому я буду признателен, если вы укажете на мою ошибку в отношении плохих манер.

1 Ответ

0 голосов
/ 25 августа 2018

Вы не должны использовать tk_menuBar в Python 2 или 3. Строка документации для этой функции говорит следующее:

"" "Не использовать. Требуется в Tk 3.6 и более ранних версиях."""

Примечание: ТК 3.6 устарела еще в начале 90-х.

Нет способа прикрепить меню к Frame виджету.Вы можете добавить экземпляры Menubutton для имитации строки меню, но вы не получите настоящую строку меню.

Вы можете прикрепить Menu к корневому окну или к экземплярам Toplevel, настроивmenu атрибут.

import tkinter as tk

root = tk.Tk()

menubar = tk.Menu()
fileMenu = tk.Menu()
editMenu = tk.Menu()
viewMenu = tk.Menu()

menubar.add_cascade(label="File", menu=fileMenu)
menubar.add_cascade(label="Edit", menu=editMenu)
menubar.add_cascade(label="View", menu=viewMenu)

root.configure(menu=menubar)

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...