【问题标题】:Namerror while using tkinter使用 tkinter 时出现名称错误
【发布时间】:2023-03-13 12:32:01
【问题描述】:

大家好,我创建菜单栏小部件的代码是:

import tkinter as tk

class Asd(tk.Frame):

    def __init__(self,master=None):
        super().__init__(master)
        self.menubar = tk.Menu(self)
        self.create_widgets()

    def create_widgets(self):
        self.filemenu = tk.Menu(self.menubar,tearoff=0)
        self.menubar.add_cascade(label="File", menu = self.filemenu)
        self.filemenu.add_command(label = "Input-file")
        self.filemenu.add_command(label = "Output-file")

root=tk.Tk()
app=Asd(master=root)
app.master.title("Testprogramm")
app.config(menu=self.menubar)
app.mainloop()

错误是“name 'self' is not defined”并且指的是该行 "app.config(menu=self.menubar)"

有谁知道如何解决它,因为 self.menubar 在 init 方法中?

【问题讨论】:

    标签: python-3.x tkinter menubar


    【解决方案1】:

    您正在尝试在类范围之外使用self。您还遇到了尝试将菜单栏附加到框架的问题。只有顶层窗口(@98​​7654322@ 和 Toplevel 的实例)可以有与其关联的菜单栏。

    您需要将违规行更改为:

    root.config(menu=app.menubar)
    

    【讨论】:

    • 啊,好的,我把你的答案挂了,它有效,谢谢!您能否详细说明为什么我需要进行上述更改,或者更确切地说,我如何将其定义为 self.menubar 并在方法中使用它,但在 root.config 命令中我不使用 menu=app.self.menubar?
    • @James:这是 python 对象的基本部分。在对象内部,对象使用self 引用自身。在对象之外,您可以通过用于将对象分配给的任何名称来引用该对象。
    • 好吧,因为我在使用 root.config 命令时不在对象之外,我需要用指定的名称来引用它
    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2015-02-27
    相关资源
    最近更新 更多