diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py
index f018f5e..67fc0b7 100644
--- a/Lib/idlelib/idle_test/test_textview.py
+++ b/Lib/idlelib/idle_test/test_textview.py
@@ -13,7 +13,7 @@
 
 import unittest
 import os
-from tkinter import Tk
+from tkinter import Tk, Button
 from idlelib.idle_test.mock_idle import Func
 from idlelib.idle_test.mock_tk import Mbox_func
 
@@ -96,5 +96,45 @@
         self.assertIsNone(view)
 
 
+class ButtonClickTextViewTest(unittest.TestCase):
+
+    def setUp(self):
+        self.view = None
+        self.called = False
+
+    def tearDown(self):
+        if self.view:
+            self.view.destroy()
+
+    def test_view_text_bind_with_button(self):
+        def _command():
+            self.called = True
+            self.view = tv.view_text(root, 'TITLE_TEXT', 'COMMAND', _utest=True)
+        button = Button(root, text='BUTTON', command=_command)
+        button.invoke()
+        self.addCleanup(button.destroy)
+
+        self.assertEqual(self.called, True)
+        self.assertEqual(self.view.title(), 'TITLE_TEXT')
+        self.assertEqual(self.view.textView.get('1.0', '1.end'), 'COMMAND')
+
+    def test_view_file_bind_with_button(self):
+        def _command():
+            self.called = True
+            self.view = tv.view_file(root, 'TITLE_FILE', __file__, _utest=True)
+        button = Button(root, text='BUTTON', command=_command)
+        button.invoke()
+        self.addCleanup(button.destroy)
+
+        self.assertEqual(self.called, True)
+        self.assertEqual(self.view.title(), 'TITLE_FILE')
+        with open(__file__) as f:
+            self.assertEqual(self.view.textView.get('1.0', '1.end'),
+                             f.readline().strip())
+            f.readline()
+            self.assertEqual(self.view.textView.get('3.0', '3.end'),
+                             f.readline().strip())
+
+
 if __name__ == '__main__':
     unittest.main(verbosity=2)
diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py
index adee326..f33ac32 100644
--- a/Lib/idlelib/textview.py
+++ b/Lib/idlelib/textview.py
@@ -9,14 +9,15 @@
 class TextViewer(Toplevel):
     "A simple text viewer dialog for IDLE."
 
-    def __init__(self, parent, title, text, modal=True, _htest=False):
-        """Show the given text in a scrollable window with a 'close' button
+    def __init__(self, parent, title, text, modal=True,
+                 _htest=False, _utest=False):
+        """Show the given text in a scrollable window with a 'close' button.
 
-        If modal option set to False, user can interact with other windows,
-        otherwise they will be unable to interact with other windows until
-        the textview window is closed.
+        If modal is left True, users cannot interact with other windows
+        until the textview window is closed.
 
         _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)
@@ -42,9 +43,11 @@
         if modal:
             self.transient(parent)
             self.grab_set()
-            self.wait_window()
+            if not _utest:
+                self.wait_window()
 
     def CreateWidgets(self):
+        "Create Frame with Text (with vertical Scrollbar) and Button."
         frameText = Frame(self, relief=SUNKEN, height=700)
         frameButtons = Frame(self)
         self.buttonOk = Button(frameButtons, text='Close',
@@ -65,10 +68,12 @@
         self.destroy()
 
 
-def view_text(parent, title, text, modal=True):
-    return TextViewer(parent, title, text, modal)
+def view_text(parent, title, text, modal=True, _utest=False):
+    "Display text in a TextViewer."
+    return TextViewer(parent, title, text, modal, _utest=_utest)
 
-def view_file(parent, title, filename, encoding=None, modal=True):
+def view_file(parent, title, filename, encoding=None, modal=True, _utest=False):
+    "Display file in a TextViever or show error message."
     try:
         with open(filename, 'r', encoding=encoding) as file:
             contents = file.read()
@@ -81,7 +86,8 @@
                   message=str(err),
                   parent=parent)
     else:
-        return view_text(parent, title, contents, modal)
+        return view_text(parent, title, contents, modal, _utest=_utest)
+
 
 if __name__ == '__main__':
     import unittest
