python2和python3之间在tkinter中向Frame添加菜单栏有什么区别吗?

时间:2018-08-25 08:17:05

标签: python python-3.x tkinter

我正在尝试在python上移植项目2to3,并卡在tkinter中。

在python2中,在tkinter的Frame中添加菜单栏没有问题,

但是python3发生了属性错误。 (框架对象没有属性'tk_menuBar')

在tkinter中将菜单栏添加到Frame中,python2和python3之间是否有区别?

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 :(得分:0)

您不应该在python 2或3中使用tk_menuBar。该函数的文档字符串说明:

  

“”“不要使用。Tk3.6及更早版本中需要。”“”

注意:tk 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()