我正在尝试在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。这是我的第一个问题,因此,如果您指出我关于不礼貌的错误,我将不胜感激。
答案 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()