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

误删Tkinter模块文件内容:如何恢复至原始状态?

恢复Tkinter中被删除的__init__.py和commondialog.py文件

解决方法

  • 优先选择:重装对应版本的Python/Tkinter模块
    • Windows:下载与当前使用版本一致的Python安装包,运行时选择「Modify」,勾选「Tkinter」组件后完成修复安装
    • Linux(Debian/Ubuntu系):执行命令 sudo apt-get reinstall python3-tk
    • macOS(通过Homebrew安装的Python):执行命令 brew reinstall python-tk
  • 手动替换文件:从Python官方源码仓库找到对应版本的文件内容,复制粘贴至Python安装目录下的tkinter文件夹中(注意不同版本代码存在差异,务必匹配版本)

对应文件代码(以Python 3.10为例)

init.py

__all__ = ['Tk', 'Toplevel', 'Canvas', 'Frame', 'Label', 'LabelFrame',
           'Entry', 'Text', 'Menu', 'Menubutton', 'Scrollbar', 'Listbox',
           'Spinbox', 'Scale', 'Checkbutton', 'Radiobutton', 'Button',
           'PanedWindow', 'Message', 'OptionMenu', 'Dialog',
           'MessageBox', 'SimpleDialog', 'filedialog', 'colorchooser',
           'commondialog', 'messagebox', 'simpledialog',
           'TclError', 'TkVersion', 'TclVersion']

from tkinter.constants import *
import sys
import os

# Import basic Tkinter modules
from tkinter.tkinter import Tk, Toplevel, Button, Canvas, Checkbutton, Entry, Frame, Label, LabelFrame, Listbox, Menubutton, Message, OptionMenu, PanedWindow, Radiobutton, Scale, Scrollbar, Spinbox, Text, Menu
from tkinter.dialog import Dialog
from tkinter.colorchooser import Chooser as colorchooser
from tkinter.filedialog import Open, SaveAs, Directory, FileDialog, askopenfilename, asksaveasfilename, askopenfilenames, asksaveasfile, askdirectory
from tkinter.commondialog import Dialog as commondialog
from tkinter.messagebox import showinfo, showwarning, showerror, askquestion, askokcancel, askyesno, askretrycancel, MessageBox
from tkinter.simpledialog import Dialog as SimpleDialog, askinteger, askfloat, askstring

# Export constants
from tkinter.constants import *

# Tcl/Tk version numbers
TkVersion = float(Tk().eval('info patchlevel'))
TclVersion = float(Tk().eval('info tclversion'))

# Exports used by IDLE
from tkinter import filedialog, messagebox, simpledialog

# Cleanup namespace
del sys, os

commondialog.py

import tkinter

class Dialog:
    "Base class for dialogs."

    def __init__(self, parent, title=None):
        self.parent = parent
        self.title = title

        self.top = tkinter.Toplevel(parent)
        self.top.withdraw()

        if parent.winfo_viewable():
            self.top.transient(parent)

        if title:
            self.top.title(title)

        self.body = tkinter.Frame(self.top)
        self.initial_focus = self.body_init(self.body)
        self.body.pack(padx=5, pady=5)

        self.buttonbox()

        self.top.protocol("WM_DELETE_WINDOW", self.cancel)

        if self.initial_focus is None:
            self.initial_focus = self.top

        self.top.geometry("+%d+%d" % (parent.winfo_rootx()+50,
                                      parent.winfo_rooty()+50))

        self.initial_focus.focus_set()

        self.top.wait_window(self.top)

    def body_init(self, master):
        "Create dialog body. Return widget that should have initial focus."
        pass

    def buttonbox(self):
        "Add standard button box. Override if you don't want the standard buttons."

        box = tkinter.Frame(self.top)

        w = tkinter.Button(box, text="OK", width=10, command=self.ok, default=tkinter.ACTIVE)
        w.pack(side=tkinter.LEFT, padx=5, pady=5)
        w = tkinter.Button(box, text="Cancel", width=10, command=self.cancel)
        w.pack(side=tkinter.LEFT, padx=5, pady=5)

        self.top.bind("<Return>", self.ok)
        self.top.bind("<Escape>", self.cancel)

        box.pack()

    def ok(self, event=None):
        if not self.validate():
            self.initial_focus.focus_set()
            return

        self.withdraw()
        self.update_idletasks()

        try:
            self.apply()
        finally:
            self.cancel()

    def cancel(self, event=None):
        if self.parent is not None:
            self.parent.focus_set()
        self.top.destroy()

    def validate(self):
        "Validate the data. Return True if ok."
        return 1

    def apply(self):
        "Process the data. Override this method."
        pass

内容的提问来源于stack exchange,提问作者Haris Bin Nasir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:43:14