【问题标题】:python tkinter option menu help - object has no attribute '_root'python tkinter选项菜单帮助-对象没有属性'_root'
【发布时间】:2015-07-14 17:55:55
【问题描述】:

这是我第一次尝试 GUI 时的一段代码。

按下“提交”按钮时,我想在按钮下方显示一个标签和 OptionMenu。我已经让标签工作了,并四处寻找解决方案,但我就是无法让 OptionMenu 工作。任何帮助将不胜感激!

我收到的错误是:

self._root = master._root()
AttributeError: 'MyApp' object has no attribute '_root'

我的代码:

from tkinter import *


class MyApp:

    def __init__(self, master):
        self.master = master
        master.title("My Application")
        master.minsize(width=800, height=800)
        master.maxsize(width=800, height=800)

        ##### Setup & Display the Labels
        self.headerLabel = Label(master, text="Label")
        self.headerLabel.grid(row=0, sticky=E)

        self.headerEntry = Label(master, text="Enter")
        self.headerEntry.grid(row=0, column=1, sticky=N)

        ##### Submit Button
        self.getButton = Button(root, text="Submit", command=self.dostuff_button)
        self.getButton.grid(row=7, column=1)

    def dostuff_button(self):
        self.inputfumelevel()

    def inputfumelevel(self):
        self.inpfumeLabel = Label(text="Input Your Fume Level")
        self.inpfumeLabel.grid(row=12, column=0)

        self.fumeEntry = StringVar(self)
        self.fumeEntry.set("Select Fume")
        self.fumeEntryOM = OptionMenu(self, self.fumeEntryOM, '1', '2', '3')
        self.fumeEntryOM.grid(row=12, column=1)


root = Tk()
my_gui = MyApp(root)
root.mainloop()

【问题讨论】:

  • 粘贴的代码存在一些格式问题。您可能想要修复它们,以便我们可以提供更多帮助。具体来说,前两行和最后一行似乎需要在它们之前有4个空格,并且不清楚 dostuff_button 和 inputfumelevel 应该是方法还是函数。
  • 对此很抱歉。我想我已经解决了格式问题。根据我极其有限的编程经验,dostuff_button 和 inputfumelevel 都是函数。
  • 可以添加 Traceback 吗?我相信您收到的错误来自内部文件。

标签: python tkinter attributeerror optionmenu


【解决方案1】:

这是问题所在的地方。

self.fumeEntry = StringVar(self)

self.fumeEntryOM = OptionMenu(self, self.fumeEntryOM, '1', '2', '3')

这些窗口小部件的主设备或父级必须是tkinter小部件。 self(参考myapp类)只是一个类而不是tkinter小部件。

您有两个选项可供您使用。

  1. 使myapp为tk()小部件的子类

    class MyApp(Tk):
    # extra code goes here
    
  2. 制作self.1的stringvar和optionmenu从站。

    self.fumeEntry = StringVar(self.master)
    # extra code
    self.fumeEntryOM = OptionMenu(self.master, self.fumeEntry, "1", "2", "3")
    

【讨论】:

    【解决方案2】:

    您的选项菜单未使用该变量进行初始化。你有:

    self.fumeEntryOM = OptionMenu(self, self.fumeEntryOM, '1', '2', '3')
    

    应该是:

    self.fumeEntryOM = OptionMenu(self, self.fumeEntry, '1', '2', '3')
    

    【讨论】:

    • 嗨 samort7,感谢您指出这一点。不幸的是,即使您正确指出了我的代码存在的问题,我仍然收到相同的错误。
    • 没问题。查看此页面以及他们如何设置课程:java2s.com/Code/Python/GUI-Tk/DefineGUIinaclass.htm 您正在混合“master”和“root”。如果我没记错的话,这些都是无意义的关键字,但是它们在你的程序中应该是一致的。
    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多