为何使用tkinter编写的代码仅生成空白方块,无按钮显示?
你的Tkinter按钮不显示的原因及修复方案
我来帮你排查下问题,你的代码里有几个关键错误导致按钮完全没显示:
错误1:内部Frame未进行布局
你在__init__里创建了frame = tk.Frame(master),但这个frame从来没有用pack()/grid()/place()完成布局——Tkinter里所有需要显示的控件,都必须通过布局方法告诉窗口它们的位置,否则会被默认隐藏。
错误2:退出按钮的command参数误用了括号
你的退出按钮写的是command = self.quit(),这会立即执行quit()方法(程序直接退出),而不是把方法绑定给按钮的点击事件。正确的写法是只传递方法引用:command = self.quit(不带括号)。
错误3:自定义Frame本身未布局
你的Application类继承自tk.Frame,但实例化后b = Application(root),这个自定义Frame也没有被布局,需要调用b.pack()或者其他布局方法让它显示在根窗口里。
另外,初始化父类的写法可以更简洁规范,用super().__init__(master)替代旧的显式调用写法。
修复后的完整代码
import tkinter as tk class Application(tk.Frame): def __init__(self, master): super().__init__(master) # 更规范的父类初始化方式 self.pack() # 布局自定义的Frame frame = tk.Frame(master) frame.pack() # 必须布局内部的frame,否则里面的控件不显示 self.PRINT = tk.Button(frame, text='Print', fg='Red', command=self.Print) self.PRINT.pack(side='left') # 注意这里去掉了括号,只传递方法引用 self.QUIT = tk.Button(frame, text='Quit', fg='Red', command=self.quit) self.QUIT.pack(side='left') def Print(self): print('at least somethings working') root = tk.Tk() b = Application(root) root.mainloop()
现在运行代码就能看到两个红色按钮了:点击Print会输出指定内容,点击Quit可以正常退出程序。
内容的提问来源于stack exchange,提问作者Jungar
相关产品推荐
相关产品推荐

