tkinter运行报TypeError:create()参数需为str或None而非App如何解决
报错根源
你写的tk.Tk().__init__(self, *args, **kwargs)存在两处核心逻辑错误:
- 你的
App类继承自tk.Frame(框架控件类),但你错误调用了tk.Tk(主窗口类)的构造方法,还把App类的实例self作为参数传入tk.Tk的初始化方法,参数类型不匹配直接触发类型报错。 - 你先执行
tk.Tk()直接实例化了一个无主的空白窗口,再调用它的__init__属于完全多余的错误写法,不符合tkinter的继承调用规范。
同时你的代码还存在其他衍生错误:
tk.Frame.title('Simulator')是直接调用类的实例方法,没有绑定具体对象,无法生效self.geometry、self.resizable是主窗口tk.Tk才有的方法,tk.Frame没有这两个方法,运行会触发二次报错- 主入口处把
App类名直接赋值给实例变量,覆盖了类定义 - 调用了未定义的
time_hours方法,没有导入对应依赖
修复方案
- 先创建
tk.Tk主窗口实例,作为App框架的父容器 - 调用继承的父类
tk.Frame的初始化方法,不要错误调用tk.Tk的初始化 - 所有窗口级别的配置(标题、尺寸、缩放限制)都绑定到主窗口对象
- 修正实例命名,删除未定义的方法调用,补充控件布局逻辑
完整可运行代码
import tkinter as tk import tkinter.ttk as ttk class App(tk.Frame): def __init__(self, master, *args, **kwargs): # 调用父类Frame的初始化方法 super().__init__(master, *args, **kwargs) self.master = master container = tk.Frame(self) container.pack(side='top', fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) # 主窗口配置绑定到master(也就是Tk实例) self.master.title('Simulator') self.master.geometry("800x800") self.master.resizable(False, False) self.label = ttk.Label(self, text='Sim', font=("Calibri",28,"bold")) self.label.pack() self.label0 = ttk.Label(self, font=("Calibri",24,"bold"), text='Monkey') self.label0.pack() self.label1 = ttk.Label(self, font=("Calibri",24,"bold"), text='Giraffe') self.label1.pack() self.label2 = ttk.Label(self, text="Flat border", font=("Calibri",24,"bold"), relief="flat") self.label2.pack() if __name__ == '__main__': # 先创建主窗口 root = tk.Tk() # 实例化Frame,传入主窗口作为master app = App(root) app.pack(fill="both", expand=True) root.mainloop()
内容的提问来源于stack exchange,提问作者user7437134
相关产品推荐
相关产品推荐

