代码之家  ›  专栏  ›  技术社区  ›  jaguar419

我很难用Toplevel打开一个新窗口

  •  -1
  • jaguar419  · 技术社区  · 8 年前

    这是我在按下打开新窗口的按钮时遇到的错误。

    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
        return self.func(*args)
      File "/Users/Jaguar/PycharmProjects/learnpython/chemcalc.py", line 78, in <lambda>
        Button(master, text='Sub', width=3, command=lambda: self.sub_win()).grid(row=2, column=6)
      File "/Users/Jaguar/PycharmProjects/learnpython/chemcalc.py", line 57, in sub_win
        top = Toplevel(self)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 2336, in __init__
        BaseWidget.__init__(self, master, 'toplevel', cnf, {}, extra)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 2286, in __init__
        BaseWidget._setup(self, master, cnf)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 2256, in _setup
        self.tk = master.tk
    AttributeError: 'calc' object has no attribute 'tk'
    

    我的代码:

    from tkinter import *
    
    
    class calc:
    
        def sub_win(self):
            top = Toplevel(self)
    
    
        def __init__(self, master):
            master.title('Title')
            master.geometry()
            self.e = Entry(master, justify = RIGHT)
            self.e.grid(row=0, column=0, columnspan=8, pady=3)
            self.answerlist = []
    
    root = Tk()
    obj=calc(root)
    root.mainloop()
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   furas    8 年前

    你的问题是 self 在里面 Toplevel(self)

    大多数小部件都需要parent作为第一个参数,必须是tkinter小部件。

    在您的代码中 不是tkinter小部件。
    你必须使用 master 就像你在 Entry(master)

    top = Toplevel(master)
    

    但你必须保持 主人 self.master .

    Toplevel 也可以在没有父级的情况下运行

    top = Toplevel()
    

    它将使用 Tk() 作为家长。