You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python Tkinter代码中的Quit按钮未显示?

问题原因及解决方案

嘿,我一眼就发现问题出在哪啦!

核心错误:构造方法命名不符合规则

Python中类的构造初始化方法必须是双下划线开头且双下划线结尾的__init__,但你写的是_init__(开头只有1个下划线)——这个命名不满足Python特殊方法的要求,导致这个方法根本不会被Python自动调用。

也就是说,你的Quitter类实例化时,完全没执行里面的Frame初始化、按钮创建与布局的逻辑,自然只会弹出一个空的窗口框架,看不到Quit按钮。

修正后的代码

只需要把构造方法的名字改对就行,这里是修正后的完整代码:

import tkinter
from tkinter import *
from tkinter.messagebox import askokcancel

class Quitter(Frame):
    # 这里改成双下划线开头的__init__
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack()
        widget = Button(self, text='Quit', command=self.quit)
        widget.pack(side=TOP, expand=YES, fill=BOTH)
    
    def quit(self):
        ans = askokcancel('Verify exit', "You want to quit?")
        if ans:
            Frame.quit(self)

if __name__ == '__main__':
    Quitter().mainloop()

额外小提示

虽然不影响功能,但建议尽量避免from tkinter import *这种星号导入方式,它会把tkinter里的所有变量都导入到当前命名空间,容易引发命名冲突。可以改成更清晰的导入方式,比如:

import tkinter as tk
from tkinter.messagebox import askokcancel

class Quitter(tk.Frame):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.pack()
        widget = tk.Button(self, text='Quit', command=self.quit)
        widget.pack(side=tk.TOP, expand=tk.YES, fill=tk.BOTH)
    
    # 后续代码不变...

内容的提问来源于stack exchange,提问作者Lucy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:29