Python2和Python3在tkinter中添加菜单栏到框架是否有差别?

2024-09-23 20:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在python上移植一个项目2to3,但却被困在了tkinter中。你知道吗

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

但是python3发生了属性错误。(框架对象没有“tk\u 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")

另外,这是我的第一个问题,如果你能指出我关于不礼貌的错误,我将不胜感激。你知道吗


Tags: self框架maptitleinittkinterwidthrows
1条回答
网友
1楼 · 发布于 2024-09-23 20:21:50

您不应该在python2或python3中使用tk_menuBar。该函数的docstring表示:

"""Do not use. Needed in Tk 3.6 and earlier."""

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

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

通过配置menu属性,可以将Menu附加到根窗口或Toplevel的实例。你知道吗

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

相关问题 更多 >