python2和python3在tkinter中向框架添加菜单栏方面有什么不同吗?

python2和python3在tkinter中向框架添加菜单栏方面有什么不同吗?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正试图在python上移植一个项目2to3,却被困在tkinter中 在python2中,在tkinter的框架中添加菜单栏没有问题 但是python3发生了属性错误。(框架对象没有属性“tk_menuBar”) python2和python3在tkinter中向框架添加菜单栏方面有什么不同吗 class TkMap(Map, tkinter.Tk): """ Map with Tkinter GUI functions """ def __init__(self, cols, rows, v

我正试图在python上移植一个项目2to3,却被困在tkinter中

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

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

python2和python3在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")
class-TkMap(Map,tkinter.Tk):
“”“使用Tkinter GUI函数映射”“”
定义初始化(self、cols、rows、value、,
宽度,高度,宽度mm,高度mm,
标题,菜单=无,键绑定=[]):
“”“TkMap扩展映射和Tkinter”“”
映射。u_初始(self、cols、rows、widthMM、heightMM)
tkinter.Tk.\uuuuu初始化\uuuuuuuuu(自)
自己的头衔(头衔)
如果菜单==无:
菜单=[('File',['Exit',self.destroy]])]
keybindings.append((“”,self.changeSize))
self.menuButtons={}
self.debug=0
self.application=0
self.width=宽度
自我高度=高度
self.colScale=self.width/self.cols
self.rowScale=self.height/self.rows
self.addMenu(菜单)
def添加菜单(自我,菜单):
“”“创建菜单”“”
self.mBar=tkinter.Frame(self,relief=tkinter.凸起,borderwidth=2)
自我包装(填充=tkinter.X)
*在菜单中输入:
self.mBar.tk_菜单栏(self.makeMenu(self.mBar,条目[0],条目[1]))*
自助mBar.pack(side=“top”)

注:这是我的第一个问题,如果您指出我关于不礼貌的错误,我将不胜感激。

您不应该在python 2或3中使用
tk_菜单栏。该函数的docstring表示:

“”“不要使用Tk 3.6及更早版本中需要的。”

注:TK3.6早在90年代初就过时了

无法将菜单附加到
框架
小部件。您可以添加
Menubutton
的实例来模拟菜单栏,但不会得到真正的菜单栏

通过配置
菜单
属性,可以将
菜单
附加到根窗口或
顶级
的实例

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

运行您的代码时,会出现语法错误。修复它后,我得到了另一个语法错误,然后是另一个,然后是
NameError:name'Map'未定义
。。。没有真实再现您的问题的代码是没有帮助的。您的主要错误是发布非工作代码。虽然在这种特定情况下,我们可能会看到问题,但一般来说,您需要提供我们可以复制粘贴然后运行的代码。您有缩进错误、缺少类定义、缺少导入和一些语法错误。感谢您指出我的错误。在本例中,我只想知道2.x 3.x之间找不到的tk_菜单栏语法,所以我不关心代码是否真正有效。下次在另一个问题上,我会记住的。啊。。。谢谢你的回答。很不幸,我不能再使用它了。@agigom1993:你没有失去任何功能。它只是一个包装器,使得在一个框架中添加菜单按钮更容易一些。