diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py
index ab653a9..ba8082c 100644
--- a/Lib/idlelib/textview.py
+++ b/Lib/idlelib/textview.py
@@ -1,14 +1,51 @@
"""Simple text browser for IDLE
"""
-from tkinter import Toplevel, Frame, Button, Text
-from tkinter import DISABLED, SUNKEN, VERTICAL, WORD
-from tkinter import RIGHT, LEFT, TOP, BOTTOM, BOTH, X, Y
-from tkinter.ttk import Scrollbar
+from tkinter import Toplevel, Text
+from tkinter.ttk import Frame, Scrollbar, Button
from tkinter.messagebox import showerror
-class TextViewer(Toplevel):
+class ButtonFrame(Frame):
+ "Display frame for buttons."
+
+ def __init__(self, parent):
+ """Create a frame for window buttons.
+
+ parent - parent widget for this frame
+ """
+ super().__init__(parent)
+ self.button_ok = button_ok = Button(self, text='Close',
+ command=parent.ok, takefocus=False)
+ button_ok.pack()
+
+
+class TextviewFrame(Frame):
+ "Display frame for text and scroll."
+
+ def __init__(self, parent, content):
+ """Create a frame for Textview.
+
+ parent - parent widget for this frame
+ content - text to display
+ """
+ super().__init__(parent)
+ self['relief'] = 'sunken'
+ self['height'] = 700
+ self.text = text = Text(self, wrap='word', highlightthickness=0,
+ fg=parent.fg, bg=parent.bg)
+ self.scroll = scroll = Scrollbar(self, orient='vertical',
+ takefocus=False, command=text.yview)
+ text['yscrollcommand'] = scroll.set
+ text.insert(0.0, content)
+ text['state'] = 'disabled'
+ text.focus_set()
+
+ scroll.pack(side='right', fill='y')
+ text.pack(side='left', expand=True, fill='both')
+
+
+class TextviewWindow(Toplevel):
"A simple text viewer dialog for IDLE."
def __init__(self, parent, title, text, modal=True,
@@ -24,26 +61,23 @@ class TextViewer(Toplevel):
_htest - bool; change box location when running htest.
_utest - bool; don't wait_window when running unittest.
"""
- Toplevel.__init__(self, parent)
- self.configure(borderwidth=5)
+ super().__init__(parent)
+ self['borderwidth'] = 5
# Place dialog below parent if running htest.
- self.geometry("=%dx%d+%d+%d" % (750, 500,
- parent.winfo_rootx() + 10,
- parent.winfo_rooty() + (10 if not _htest else 100)))
+ self.geometry("={width}x{height}+{x}+{y}".
+ format(width=750, height=500,
+ x=parent.winfo_rootx() + 10,
+ y=parent.winfo_rooty() + (10 if not _htest else 100)))
# TODO: get fg/bg from theme.
self.bg = '#ffffff'
self.fg = '#000000'
- self.create_widgets()
self.title(title)
self.protocol("WM_DELETE_WINDOW", self.ok)
- self.parent = parent
- self.text.focus_set()
- # Bind keys for closing this dialog.
self.bind('