误删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
相关产品推荐
相关产品推荐

