TclError: Unkown option '-menu' using tkinter on python3.7
TclError: Unkown option '-menu' using tkinter on python3.7
正在学习如何使用 tkinter,我遇到了一个我不理解的错误,因为它对我来说真的没有意义。它指出无法识别选项“-menu”,但是...我不使用它?
感谢阅读并可能提供帮助!
import tkinter as tk
LARGE_FONT = ('Verdana', 12)
class CofBTC(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side='top', fill='both', expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
frame = startPage(container,self)
self.frames[startPage] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.showFrame(startPage)
def showFrame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class startPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent, controller)
label = tk.Label(self, text = 'Start Page', font = LARGE_FONT)
label.pack(pady=10, padx=10)
root= tk.Tk('TestTkinter')
app = CofBTC()
app.mainloop()
编辑:被要求提供完整的错误信息,所以在这里(我不是很明白,所以出于某种原因我没有想到有些人确实理解这些哈哈):
Traceback (most recent call last):
File "<ipython-input-4-9a8fe12ef0a8>", line 1, in <module>
runfile('C:/Users/danburnier/Desktop/Music21/sanstitre4.py', wdir='C:/Users/danburnier/Desktop/Music21')
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/danburnier/Desktop/Music21/sanstitre4.py", line 52, in <module>
app = CofBTC()
File "C:/Users/danburnier/Desktop/Music21/sanstitre4.py", line 29, in __init__
frame = startPage(container,self)
File "C:/Users/danburnier/Desktop/Music21/sanstitre4.py", line 46, in __init__
tk.Frame.__init__(self, parent, controller)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\tkinter\__init__.py", line 2744, in __init__
Widget.__init__(self, master, 'frame', cnf, {}, extra)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\tkinter\__init__.py", line 2299, in __init__
(widgetName, self._w) + extra + self._options(cnf))
TclError: unknown option "-menu"`
问题是因为您将 controller
发送到 Frame
tk.Frame.__init__(self, parent, controller)
它不知道如何处理这个意外元素
你需要
tk.Frame.__init__(self, parent)
顺便说一句: 如果你继承自 tk.Tk
- class CofBTC(tk.Tk)
那么你不需要 root= tk.Tk('TestTkinter')
因为 tkinter
应该只使用一个 window 用 Tk()
创建
在Python3中可以使用super()
#tk.Tk.__init__(self, *args, **kwargs)
super().__init__(*args, **kwargs)
和
#tk.Frame.__init__(self, parent)
super().__init__(parent)
正在学习如何使用 tkinter,我遇到了一个我不理解的错误,因为它对我来说真的没有意义。它指出无法识别选项“-menu”,但是...我不使用它?
感谢阅读并可能提供帮助!
import tkinter as tk
LARGE_FONT = ('Verdana', 12)
class CofBTC(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side='top', fill='both', expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
frame = startPage(container,self)
self.frames[startPage] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.showFrame(startPage)
def showFrame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class startPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent, controller)
label = tk.Label(self, text = 'Start Page', font = LARGE_FONT)
label.pack(pady=10, padx=10)
root= tk.Tk('TestTkinter')
app = CofBTC()
app.mainloop()
编辑:被要求提供完整的错误信息,所以在这里(我不是很明白,所以出于某种原因我没有想到有些人确实理解这些哈哈):
Traceback (most recent call last):
File "<ipython-input-4-9a8fe12ef0a8>", line 1, in <module>
runfile('C:/Users/danburnier/Desktop/Music21/sanstitre4.py', wdir='C:/Users/danburnier/Desktop/Music21')
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/danburnier/Desktop/Music21/sanstitre4.py", line 52, in <module>
app = CofBTC()
File "C:/Users/danburnier/Desktop/Music21/sanstitre4.py", line 29, in __init__
frame = startPage(container,self)
File "C:/Users/danburnier/Desktop/Music21/sanstitre4.py", line 46, in __init__
tk.Frame.__init__(self, parent, controller)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\tkinter\__init__.py", line 2744, in __init__
Widget.__init__(self, master, 'frame', cnf, {}, extra)
File "C:\Users\danburnier\AppData\Local\Continuum\anaconda3\lib\tkinter\__init__.py", line 2299, in __init__
(widgetName, self._w) + extra + self._options(cnf))
TclError: unknown option "-menu"`
问题是因为您将 controller
发送到 Frame
tk.Frame.__init__(self, parent, controller)
它不知道如何处理这个意外元素
你需要
tk.Frame.__init__(self, parent)
顺便说一句: 如果你继承自 tk.Tk
- class CofBTC(tk.Tk)
那么你不需要 root= tk.Tk('TestTkinter')
因为 tkinter
应该只使用一个 window 用 Tk()
在Python3中可以使用super()
#tk.Tk.__init__(self, *args, **kwargs)
super().__init__(*args, **kwargs)
和
#tk.Frame.__init__(self, parent)
super().__init__(parent)