Positional Argument Error: Classes and Tkinter
Positional Argument Error: Classes and Tkinter
所以我正在测试 Tkinter 程序的一些代码,并希望有一个主菜单,然后是游戏本身。
我想将主菜单放在 __init__()
函数中,然后当按下按钮时,它会调用删除主菜单并加载新小部件的命令。为了测试,我只包含了 2 个按钮作为我的小部件,只是为了尝试这个想法。但是它出现了一个错误:
from tkinter import *
from tkinter import ttk
class Application:
def __init__(self, master):
But = ttk.Button(master, text = "Play", command = self.Play).pack()
def Play(self, master):
self.But.destroy()
ttk.Button(master, text = "Test Button").pack()
def main():
root = Tk()
Menu = Application(root)
root.resizable(width=False, height=False)
root.mainloop()
if __name__ == "__main__": main()
点击 "Play" 按钮时,出现以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
TypeError: Play() missing 1 required positional argument: 'master'
我对使用 类 进行 tkinter 编程还很陌生。任何帮助都会很棒。
你得到那个错误是因为当你定义 Play()
函数时(在 def Play(self, master)
中)你已经指定了一个名为 master
的位置参数,它是强制性的但是当你使用相同的函数作为 ttk.Button
小部件的回调。这意味着您应该这样编码:lambda:self.Play(master)
。
一旦你这样做了,Python 解释器会通知你你在程序的其他地方犯了其他错误。因此,让我在 PEP8:
之后为您的程序提供最终解决方案
import tkinter as tk
from tkinter import ttk
class Application:
def __init__(self, master):
self.master = master
self.button = ttk.Button(self.master, text = "play", command = self.play)
self.button.pack()
def play(self):
self.button.destroy()
self.new_button = ttk.Button(self.master, text = "Test Button")
self.new_button.pack()
def main():
root = tk.Tk()
Menu = Application(root)
root.resizable(width=False, height=False)
root.mainloop()
if __name__ == "__main__":
main()
所以我正在测试 Tkinter 程序的一些代码,并希望有一个主菜单,然后是游戏本身。
我想将主菜单放在 __init__()
函数中,然后当按下按钮时,它会调用删除主菜单并加载新小部件的命令。为了测试,我只包含了 2 个按钮作为我的小部件,只是为了尝试这个想法。但是它出现了一个错误:
from tkinter import *
from tkinter import ttk
class Application:
def __init__(self, master):
But = ttk.Button(master, text = "Play", command = self.Play).pack()
def Play(self, master):
self.But.destroy()
ttk.Button(master, text = "Test Button").pack()
def main():
root = Tk()
Menu = Application(root)
root.resizable(width=False, height=False)
root.mainloop()
if __name__ == "__main__": main()
点击 "Play" 按钮时,出现以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
TypeError: Play() missing 1 required positional argument: 'master'
我对使用 类 进行 tkinter 编程还很陌生。任何帮助都会很棒。
你得到那个错误是因为当你定义 Play()
函数时(在 def Play(self, master)
中)你已经指定了一个名为 master
的位置参数,它是强制性的但是当你使用相同的函数作为 ttk.Button
小部件的回调。这意味着您应该这样编码:lambda:self.Play(master)
。
一旦你这样做了,Python 解释器会通知你你在程序的其他地方犯了其他错误。因此,让我在 PEP8:
之后为您的程序提供最终解决方案import tkinter as tk
from tkinter import ttk
class Application:
def __init__(self, master):
self.master = master
self.button = ttk.Button(self.master, text = "play", command = self.play)
self.button.pack()
def play(self):
self.button.destroy()
self.new_button = ttk.Button(self.master, text = "Test Button")
self.new_button.pack()
def main():
root = tk.Tk()
Menu = Application(root)
root.resizable(width=False, height=False)
root.mainloop()
if __name__ == "__main__":
main()