![](/img/trans.png)
[英]Error in creating Tkinter GUI: 'Window' object has no attribute '_tk'
[英]Python Tkinter. Fix attribute error “Event object has no attribute tk” when using binding to create a new window
我已經創建了一個菜單欄,並且試圖創建鍵盤快捷方式來打開這些鏈接。 該快捷方式將運行一個運行類的函數。 此類創建一個新窗口。 但我不斷收到此錯誤:
AttributeError: 'Event' object has no attribute 'tk'
對於與我類似的問題,我經歷了許多答案,但沒有成功。 我讀過多個答案,我需要完成一個類的實例的創建。
我不明白的是,當單擊菜單欄上的鏈接時,它會起作用。 在綁定命令之前的TrackComicScreen類中。
這是我的代碼的最小化版本。
from tkinter import *
class TrackComicScreen:
def __init__(self, master):
self.master = master
root.bind("<Control-Shift-A>", self.AddNewEntry)
def AddNewEntry(self, master):
addComic(master)
class addComic:
def __init__(self, master):
self.AddNewEntryWindow = Toplevel(master)
self.AddNewEntryWindow.geometry('460x440')
#WINDOW PROPERTIES
root = Tk()
root.geometry("1074x714")
currWindow = TrackComicScreen(root)
root.mainloop()
錯誤消息提取
addComic(master) self.AddNewEntryWindow = Toplevel(master) BaseWidget.__init__(self, master, 'toplevel', cnf, {}, extra) BaseWidget._setup(self, master, cnf) self.tk = master.tk AttributeError: 'Event' object has no attribute 'tk'
預期結果是按Ctrl Shift A時會出現一個新窗口。
bind
在調用時會生成一個事件,然后將其傳遞給回調函數。 簡而言之,您正在執行:
def AddNewEntry(self, event):
addComic(event)
並且該事件不能成為Toplevel
。
當您將功能綁定到鍵時,該功能將由一個位置參數引起,該位置參數表示導致綁定的事件。
考慮以下代碼:
root.bind("<Control-Shift-A>", self.AddNewEntry)
調用self.AddNewEntry
時, self.AddNewEntry
將使用一個參數來調用它,該參數是表示事件的對象(例如: self.AddNewEntry(event)
)。 該對象具有諸如接收事件的小部件,鼠標指針的x / y坐標,所按下的鍵等屬性。
您已將此參數命名為master
,這使我認為您期望該代碼以某種方式表示master或root窗口。 事實上,你傳遞參數addComic
,然后嘗試使用此事件對象作為主窗口的Toplevel
窗口。 由於您不能將事件對象用作另一個窗口的主對象,因此會出現錯誤。
雖然您可以修改綁定以將master
傳遞給函數,但是由於將master
存儲為類的屬性,因此無需這樣做AddNewEntry
已經知道master
是什么。
解決方案是重寫AddNewEntry
以接受event
參數並忽略它,然后將self.master
傳遞給addComic
:
def AddNewEntry(self, event):
addComic(self.master)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.