【问题标题】:Beginner crazy with - AttributeError: 'Window' object has no attribute 'tk'初学者疯狂 - AttributeError:'Window'对象没有属性'tk'
【发布时间】:2021-05-29 21:53:28
【问题描述】:

main.py

from window import *
from toplevel import *

w = Window("Title")
t = Top(w)

window.py

### IMPORT TKINTER
from tkinter import *

## CLASS Window

class Window():

def __init__(self , title):
    self.window = Tk()
    self.window.title(title)
    self.window.mainloop()

toplevel.py

### IMPORT 'TKINTER'
from tkinter import *

## CLASS TOP
class Top():

def __init__(self , master):
    self.top = Toplevel(master)
    self.top.transient(master)
    self.top.resizable(0 , 0)
    self.top.mainloop()

TOPLEVEL 没有出现,当我关闭“Window”时,控制台输出是:AttributeError: 'Window' object has no attribute 'tk'

有人可以帮助我吗?非常感谢

【问题讨论】:

  • 使用t = Top(w.window) 而不是t = Top(w)。或者你可以让Window继承自Tk
  • 只是一个有用的说明 - 使用from module import * 处理所有事情是一个不好的习惯,尤其是当只导入一个类/函数时。养成使用命名空间的习惯 - window.Window()toplevel.Top() 等。
  • 运行import this 并阅读它。然后继续重读。我偶尔也会这样做。
  • @MattDMo Python 之禅并不是最佳实践的最佳来源。我不明白其中的大部分。我认为最好只查看流行(更有可能遵循最佳实践)库的源代码。

标签: python tkinter root toplevel


【解决方案1】:

您只能将小部件用作其他小部件的父级。您正在使用w——Window 的一个实例——作为在Top 中创建的窗口的父级。

您要么需要Window 继承自 tkinter 小部件(例如:class Window(Tk))使其成为小部件,要么您需要传入 w.window 作为父级(例如:t = Top(w.window)

【讨论】:

  • 是的!!!!我对 TKINTER 层次结构感到困惑。非常感谢!!
猜你喜欢
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2021-11-22
  • 2018-10-17
  • 2015-09-27
相关资源
最近更新 更多