From f6654cad537020018d8da83d3bb0212677977870 Mon Sep 17 00:00:00 2001 From: Cheryl Sabella Date: Sat, 27 May 2017 21:07:54 -0400 Subject: [PATCH 1/3] bpo-30290: IDLE: Refactor textview.py to PEP8 names --- Lib/idlelib/idle_test/test_textview.py | 20 +++---- Lib/idlelib/textview.py | 72 ++++++++++++++++---------- 2 files changed, 55 insertions(+), 37 deletions(-) diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py index 57b886aba11f31e..22f869b39469ccf 100644 --- a/Lib/idlelib/idle_test/test_textview.py +++ b/Lib/idlelib/idle_test/test_textview.py @@ -41,7 +41,7 @@ class TV(tv.TextViewer): # Used in TextViewTest. # Call wrapper class with mock wait_window. class TextViewTest(unittest.TestCase): - + def setUp(self): TV.transient.__init__() TV.grab_set.__init__() @@ -52,19 +52,19 @@ def test_init_modal(self): self.assertTrue(TV.transient.called) self.assertTrue(TV.grab_set.called) self.assertTrue(TV.wait_window.called) - view.Ok() + view.ok() def test_init_nonmodal(self): view = TV(root, 'Title', 'test text', modal=False) self.assertFalse(TV.transient.called) self.assertFalse(TV.grab_set.called) self.assertFalse(TV.wait_window.called) - view.Ok() + view.ok() def test_ok(self): view = TV(root, 'Title', 'test text', modal=False) view.destroy = Func() - view.Ok() + view.ok() self.assertTrue(view.destroy.called) del view.destroy # Unmask real function. view.destroy() @@ -86,13 +86,13 @@ def tearDownClass(cls): def test_view_text(self): view = tv.view_text(root, 'Title', 'test text', modal=False) self.assertIsInstance(view, tv.TextViewer) - view.Ok() + view.ok() def test_view_file(self): view = tv.view_file(root, 'Title', __file__, modal=False) self.assertIsInstance(view, tv.TextViewer) - self.assertIn('Test', view.textView.get('1.0', '1.end')) - view.Ok() + self.assertIn('Test', view.textview.get('1.0', '1.end')) + view.ok() def test_bad_file(self): # Mock showerror will be used; view_file will return None. @@ -131,7 +131,7 @@ def _command(): self.assertEqual(self.called, True) self.assertEqual(self.view.title(), 'TITLE_TEXT') - self.assertEqual(self.view.textView.get('1.0', '1.end'), 'COMMAND') + self.assertEqual(self.view.textview.get('1.0', '1.end'), 'COMMAND') def test_view_file_bind_with_button(self): def _command(): @@ -144,10 +144,10 @@ def _command(): 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'), + 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'), + self.assertEqual(self.view.textview.get('3.0', '3.end'), f.readline().strip()) diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py index dc1a7bfc9eff388..5526658f41abf89 100644 --- a/Lib/idlelib/textview.py +++ b/Lib/idlelib/textview.py @@ -1,7 +1,9 @@ """Simple text browser for IDLE """ -from tkinter import * +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.messagebox import showerror @@ -16,6 +18,9 @@ def __init__(self, parent, title, text, modal=True, If modal is left True, users cannot interact with other windows until the textview window is closed. + parent - parent of this dialog + title - string which is title of popup dialog + text - text to display in dialog _htest - bool; change box location when running htest. _utest - bool; don't wait_window when running unittest. """ @@ -29,16 +34,16 @@ def __init__(self, parent, title, text, modal=True, self.bg = '#ffffff' self.fg = '#000000' - self.CreateWidgets() + self.create_widgets() self.title(title) - self.protocol("WM_DELETE_WINDOW", self.Ok) + self.protocol("WM_DELETE_WINDOW", self.ok) self.parent = parent - self.textView.focus_set() + self.textview.focus_set() # Bind keys for closing this dialog. - self.bind('',self.Ok) - self.bind('',self.Ok) - self.textView.insert(0.0, text) - self.textView.config(state=DISABLED) + self.bind('', self.ok) + self.bind('', self.ok) + self.textview.insert(0.0, text) + self.textview.config(state=DISABLED) if modal: self.transient(parent) @@ -46,34 +51,47 @@ def __init__(self, parent, title, text, modal=True, if not _utest: self.wait_window() - def CreateWidgets(self): + def create_widgets(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', - command=self.Ok, takefocus=FALSE) - self.scrollbarView = Scrollbar(frameText, orient=VERTICAL, - takefocus=FALSE) - self.textView = Text(frameText, wrap=WORD, highlightthickness=0, + frame = Frame(self, relief=SUNKEN, height=700) + frame_buttons = Frame(self) + self.button_ok = Button(frame_buttons, text='Close', + command=self.ok, takefocus=False) + self.scrollbar = Scrollbar(frame, orient=VERTICAL, takefocus=False) + self.textview = Text(frame, wrap=WORD, highlightthickness=0, fg=self.fg, bg=self.bg) - self.scrollbarView.config(command=self.textView.yview) - self.textView.config(yscrollcommand=self.scrollbarView.set) - self.buttonOk.pack() - self.scrollbarView.pack(side=RIGHT,fill=Y) - self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH) - frameButtons.pack(side=BOTTOM,fill=X) - frameText.pack(side=TOP,expand=TRUE,fill=BOTH) - - def Ok(self, event=None): + self.scrollbar.config(command=self.textview.yview) + self.textview.config(yscrollcommand=self.scrollbar.set) + self.button_ok.pack() + self.scrollbar.pack(side=RIGHT, fill=Y) + self.textview.pack(side=LEFT, expand=True, fill=BOTH) + frame_buttons.pack(side=BOTTOM, fill=X) + frame.pack(side=TOP, expand=True, fill=BOTH) + + def ok(self, event=None): + """Dismiss text viewer dialog.""" self.destroy() def view_text(parent, title, text, modal=True, _utest=False): - "Display text in a TextViewer." + """Create TextViewer for given text. + + parent - parent of this dialog + title - string which is the title of popup dialog + text - text to display in this dialog + modal - controls if users can interact with other windows while this + dialog is displayed + _utest - bool; controls wait_window on unittest + """ return TextViewer(parent, title, text, modal, _utest=_utest) + def view_file(parent, title, filename, encoding=None, modal=True, _utest=False): - "Display file in a TextViever or show error message." + """Create TextViewer for text in filename. + + Return error message if file cannot be read. Otherwise calls view_text + with contents of the file. + """ try: with open(filename, 'r', encoding=encoding) as file: contents = file.read() From 4f9c1ec77a4ed72339fd7d58a43d08f52f2b569b Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sun, 28 May 2017 00:34:05 -0400 Subject: [PATCH 2/3] Fix confusion over textView/textview/text attribute. --- Lib/idlelib/idle_test/test_help_about.py | 8 ++++---- Lib/idlelib/idle_test/test_textview.py | 8 ++++---- Lib/idlelib/textview.py | 15 ++++++++------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Lib/idlelib/idle_test/test_help_about.py b/Lib/idlelib/idle_test/test_help_about.py index 484f39ffbd692a9..d5dac415edd8ee7 100644 --- a/Lib/idlelib/idle_test/test_help_about.py +++ b/Lib/idlelib/idle_test/test_help_about.py @@ -56,9 +56,9 @@ def test_printer_dialog(self): printer._Printer__setup() button.invoke() self.assertEqual(printer._Printer__lines[0], - dialog._current_textview.textView.get('1.0', '1.end')) + dialog._current_textview.text.get('1.0', '1.end')) self.assertEqual(printer._Printer__lines[1], - dialog._current_textview.textView.get('2.0', '2.end')) + dialog._current_textview.text.get('2.0', '2.end')) dialog._current_textview.destroy() @@ -74,10 +74,10 @@ def test_file_dialog(self): fn = findfile(filename, subdir='idlelib') with open(fn) as f: self.assertEqual(f.readline().strip(), - dialog._current_textview.textView.get('1.0', '1.end')) + dialog._current_textview.text.get('1.0', '1.end')) f.readline() self.assertEqual(f.readline().strip(), - dialog._current_textview.textView.get('3.0', '3.end')) + dialog._current_textview.text.get('3.0', '3.end')) dialog._current_textview.destroy() diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py index 22f869b39469ccf..7a2f7e460f2c7e5 100644 --- a/Lib/idlelib/idle_test/test_textview.py +++ b/Lib/idlelib/idle_test/test_textview.py @@ -91,7 +91,7 @@ def test_view_text(self): def test_view_file(self): view = tv.view_file(root, 'Title', __file__, modal=False) self.assertIsInstance(view, tv.TextViewer) - self.assertIn('Test', view.textview.get('1.0', '1.end')) + self.assertIn('Test', view.text.get('1.0', '1.end')) view.ok() def test_bad_file(self): @@ -131,7 +131,7 @@ def _command(): self.assertEqual(self.called, True) self.assertEqual(self.view.title(), 'TITLE_TEXT') - self.assertEqual(self.view.textview.get('1.0', '1.end'), 'COMMAND') + self.assertEqual(self.view.text.get('1.0', '1.end'), 'COMMAND') def test_view_file_bind_with_button(self): def _command(): @@ -144,10 +144,10 @@ def _command(): 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'), + self.assertEqual(self.view.text.get('1.0', '1.end'), f.readline().strip()) f.readline() - self.assertEqual(self.view.textview.get('3.0', '3.end'), + self.assertEqual(self.view.text.get('3.0', '3.end'), f.readline().strip()) diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py index 5526658f41abf89..ab653a914132525 100644 --- a/Lib/idlelib/textview.py +++ b/Lib/idlelib/textview.py @@ -38,12 +38,12 @@ def __init__(self, parent, title, text, modal=True, self.title(title) self.protocol("WM_DELETE_WINDOW", self.ok) self.parent = parent - self.textview.focus_set() + self.text.focus_set() # Bind keys for closing this dialog. self.bind('', self.ok) self.bind('', self.ok) - self.textview.insert(0.0, text) - self.textview.config(state=DISABLED) + self.text.insert(0.0, text) + self.text.config(state=DISABLED) if modal: self.transient(parent) @@ -58,13 +58,14 @@ def create_widgets(self): self.button_ok = Button(frame_buttons, text='Close', command=self.ok, takefocus=False) self.scrollbar = Scrollbar(frame, orient=VERTICAL, takefocus=False) - self.textview = Text(frame, wrap=WORD, highlightthickness=0, + self.text = Text(frame, wrap=WORD, highlightthickness=0, fg=self.fg, bg=self.bg) - self.scrollbar.config(command=self.textview.yview) - self.textview.config(yscrollcommand=self.scrollbar.set) + self.scrollbar.config(command=self.text.yview) + self.text.config(yscrollcommand=self.scrollbar.set) + self.button_ok.pack() self.scrollbar.pack(side=RIGHT, fill=Y) - self.textview.pack(side=LEFT, expand=True, fill=BOTH) + self.text.pack(side=LEFT, expand=True, fill=BOTH) frame_buttons.pack(side=BOTTOM, fill=X) frame.pack(side=TOP, expand=True, fill=BOTH) From ece6a2dd1c542260ae30b3c1850dee2693b10d6e Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sun, 28 May 2017 05:32:12 -0400 Subject: [PATCH 3/3] Fix merge mistake --- Lib/idlelib/idle_test/test_help_about.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Lib/idlelib/idle_test/test_help_about.py b/Lib/idlelib/idle_test/test_help_about.py index a757b8475a81931..15d1b6b42c797ab 100644 --- a/Lib/idlelib/idle_test/test_help_about.py +++ b/Lib/idlelib/idle_test/test_help_about.py @@ -48,7 +48,7 @@ def test_printer_buttons(self): dialog._current_textview.text.get('1.0', '1.end')) self.assertEqual( printer._Printer__lines[1], - dialog._current_textview.text.get('2.0', '2.end') + dialog._current_textview.text.get('2.0', '2.end')) dialog._current_textview.destroy() def test_file_buttons(self): @@ -66,8 +66,9 @@ def test_file_buttons(self): f.readline().strip(), dialog._current_textview.text.get('1.0', '1.end')) f.readline() - self.assertEqual(f.readline().strip(), - dialog._current_textview.text.get('3.0', '3.end')) + self.assertEqual( + f.readline().strip(), + dialog._current_textview.text.get('3.0', '3.end')) dialog._current_textview.destroy()