"""Simple text browser for IDLE"""from tkinter import Toplevel, Text, TclError,\HORIZONTAL, VERTICAL, N, S, E, Wfrom tkinter.ttk import Frame, Scrollbar, Buttonfrom tkinter.messagebox import showerrorfrom idlelib.colorizer import color_configclass AutoHiddenScrollbar(Scrollbar):"""A scrollbar that is automatically hidden when not needed.Only the grid geometry manager is supported."""def set(self, lo, hi):if float(lo) > 0.0 or float(hi) < 1.0:self.grid()else:self.grid_remove()super().set(lo, hi)def pack(self, **kwargs):raise TclError(f'{self.__class__.__name__} does not support "pack"')def place(self, **kwargs):raise TclError(f'{self.__class__.__name__} does not support "place"')class TextFrame(Frame):"Display text with scrollbar."def __init__(self, parent, rawtext, wrap='word'):"""Create a frame for Textview.parent - parent widget for this framerawtext - text to display"""super().__init__(parent)self['relief'] = 'sunken'self['height'] = 700self.text = text = Text(self, wrap=wrap, highlightthickness=0)color_config(text)text.grid(row=0, column=0, sticky=N+S+E+W)self.grid_rowconfigure(0, weight=1)self.grid_columnconfigure(0, weight=1)text.insert(0.0, rawtext)text['state'] = 'disabled'text.focus_set()# vertical scrollbarself.yscroll = yscroll = AutoHiddenScrollbar(self, orient=VERTICAL,takefocus=False,command=text.yview)text['yscrollcommand'] = yscroll.setyscroll.grid(row=0, column=1, sticky=N+S)if wrap == 'none':# horizontal scrollbarself.xscroll = xscroll = AutoHiddenScrollbar(self, orient=HORIZONTAL,takefocus=False,command=text.xview)text['xscrollcommand'] = xscroll.setxscroll.grid(row=1, column=0, sticky=E+W)class ViewFrame(Frame):"Display TextFrame and Close button."def __init__(self, parent, text, wrap='word'):super().__init__(parent)self.parent = parentself.bind('<Return>', self.ok)self.bind('<Escape>', self.ok)self.textframe = TextFrame(self, text, wrap=wrap)self.button_ok = button_ok = Button(self, text='Close', command=self.ok, takefocus=False)self.textframe.pack(side='top', expand=True, fill='both')button_ok.pack(side='bottom')def ok(self, event=None):"""Dismiss text viewer dialog."""self.parent.destroy()class ViewWindow(Toplevel):"A simple text viewer dialog for IDLE."def __init__(self, parent, title, text, modal=True, wrap='word',*, _htest=False, _utest=False):"""Show the given text in a scrollable window with a 'close' button.If modal is left True, users cannot interact with other windowsuntil the textview window is closed.parent - parent of this dialogtitle - string which is title of popup dialogtext - text to display in dialogwrap - type of text wrapping to use ('word', 'char' or 'none')_htest - bool; change box location when running htest._utest - bool; don't wait_window when running unittest."""super().__init__(parent)self['borderwidth'] = 5# Place dialog below parent if running htest.x = parent.winfo_rootx() + 10y = parent.winfo_rooty() + (10 if not _htest else 100)self.geometry(f'=750x500+{x}+{y}')self.title(title)self.viewframe = ViewFrame(self, text, wrap=wrap)self.protocol("WM_DELETE_WINDOW", self.ok)self.button_ok = button_ok = Button(self, text='Close',command=self.ok, takefocus=False)self.viewframe.pack(side='top', expand=True, fill='both')self.is_modal = modalif self.is_modal:self.transient(parent)self.grab_set()if not _utest:self.wait_window()def ok(self, event=None):"""Dismiss text viewer dialog."""if self.is_modal:self.grab_release()self.destroy()def view_text(parent, title, text, modal=True, wrap='word', _utest=False):"""Create text viewer for given text.parent - parent of this dialogtitle - string which is the title of popup dialogtext - text to display in this dialogwrap - type of text wrapping to use ('word', 'char' or 'none')modal - controls if users can interact with other windows while thisdialog is displayed_utest - bool; controls wait_window on unittest"""return ViewWindow(parent, title, text, modal, wrap=wrap, _utest=_utest)def view_file(parent, title, filename, encoding, modal=True, wrap='word',_utest=False):"""Create text viewer for text in filename.Return error message if file cannot be read. Otherwise calls view_textwith contents of the file."""try:with open(filename, 'r', encoding=encoding) as file:contents = file.read()except OSError:showerror(title='File Load Error',message=f'Unable to load file {filename!r} .',parent=parent)except UnicodeDecodeError as err:showerror(title='Unicode Decode Error',message=str(err),parent=parent)else:return view_text(parent, title, contents, modal, wrap=wrap,_utest=_utest)return Noneif __name__ == '__main__':from unittest import mainmain('idlelib.idle_test.test_textview', verbosity=2, exit=False)from idlelib.idle_test.htest import runrun(ViewWindow)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。