[Python-checkins] cpython: Issue #27477: Convert IDLE search dialogs to using ttk widgets.

terry.reedy python-checkins at python.org
Sun Jul 10 20:21:43 EDT 2016


https://hg.python.org/cpython/rev/91fe65e3d7bb
changeset:   102316:91fe65e3d7bb
user:        Terry Jan Reedy <tjreedy at udel.edu>
date:        Sun Jul 10 20:21:31 2016 -0400
summary:
  Issue #27477: Convert IDLE search dialogs to using ttk widgets.

files:
  Lib/idlelib/grep.py                      |  13 ++--
  Lib/idlelib/idle_test/htest.py           |   7 ++
  Lib/idlelib/idle_test/test_searchbase.py |  13 +----
  Lib/idlelib/replace.py                   |   6 +-
  Lib/idlelib/search.py                    |  11 ++-
  Lib/idlelib/searchbase.py                |  36 ++++++++---
  6 files changed, 50 insertions(+), 36 deletions(-)


diff --git a/Lib/idlelib/grep.py b/Lib/idlelib/grep.py
--- a/Lib/idlelib/grep.py
+++ b/Lib/idlelib/grep.py
@@ -1,7 +1,8 @@
 import os
 import fnmatch
 import sys
-from tkinter import StringVar, BooleanVar, Checkbutton  # for GrepDialog
+from tkinter import StringVar, BooleanVar
+from tkinter.ttk import Checkbutton
 from idlelib import searchengine
 from idlelib.searchbase import SearchDialogBase
 # Importing OutputWindow fails due to import loop
@@ -45,13 +46,10 @@
         self.globent = self.make_entry("In files:", self.globvar)[0]
 
     def create_other_buttons(self):
-        f = self.make_frame()[0]
-
-        btn = Checkbutton(f, anchor="w",
-                variable=self.recvar,
+        btn = Checkbutton(
+                self.make_frame()[0], variable=self.recvar,
                 text="Recurse down subdirectories")
         btn.pack(side="top", fill="both")
-        btn.select()
 
     def create_command_buttons(self):
         SearchDialogBase.create_command_buttons(self)
@@ -130,7 +128,8 @@
 
 def _grep_dialog(parent):  # htest #
     from idlelib.pyshell import PyShellFileList
-    from tkinter import Toplevel, Text, Button, SEL, END
+    from tkinter import Toplevel, Text, SEL, END
+    from tkinter.ttk import Button
     top = Toplevel(parent)
     top.title("Test GrepDialog")
     x, y = map(int, parent.geometry().split('+')[1:])
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
--- a/Lib/idlelib/idle_test/htest.py
+++ b/Lib/idlelib/idle_test/htest.py
@@ -265,6 +265,13 @@
            "Click [Close] or [X] to close the 'Search Dialog'."
     }
 
+_searchbase_spec = {
+    'file': 'searchbase',
+    'kwds': {},
+    'msg': "Check the appearance of the base search dialog\n"
+           "Its only action is to close."
+    }
+
 _scrolled_list_spec = {
     'file': 'scrolledlist',
     'kwds': {},
diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py
--- a/Lib/idlelib/idle_test/test_searchbase.py
+++ b/Lib/idlelib/idle_test/test_searchbase.py
@@ -1,8 +1,7 @@
-'''Unittests for idlelib/searchbase.py
+'''tests idlelib.searchbase.
 
 Coverage: 99%. The only thing not covered is inconsequential --
 testing skipping of suite when self.needwrapbutton is false.
-
 '''
 import unittest
 from test.support import requires
@@ -120,11 +119,6 @@
                 var, label = spec
                 self.assertEqual(button['text'], label)
                 self.assertEqual(var.get(), state)
-                if state == 1:
-                    button.deselect()
-                else:
-                    button.select()
-                self.assertEqual(var.get(), 1 - state)
 
     def test_create_other_buttons(self):
         for state in (False, True):
@@ -140,10 +134,6 @@
                     # hit other button, then this one
                     # indexes depend on button order
                     self.assertEqual(var.get(), state)
-                    buttons[val].select()
-                    self.assertEqual(var.get(), 1 - state)
-                    buttons[1-val].select()
-                    self.assertEqual(var.get(), state)
 
     def test_make_button(self):
         self.dialog.top = self.root
@@ -162,6 +152,5 @@
         self.assertIn('close', closebuttoncommand)
 
 
-
 if __name__ == '__main__':
     unittest.main(verbosity=2, exit=2)
diff --git a/Lib/idlelib/replace.py b/Lib/idlelib/replace.py
--- a/Lib/idlelib/replace.py
+++ b/Lib/idlelib/replace.py
@@ -3,7 +3,7 @@
 Defines various replace related functions like replace, replace all,
 replace+find.
 """
-from tkinter import *
+from tkinter import StringVar, TclError
 
 from idlelib import searchengine
 from idlelib.searchbase import SearchDialogBase
@@ -204,7 +204,9 @@
 
 
 def _replace_dialog(parent):  # htest #
-    """htest wrapper function"""
+    from tkinter import Toplevel, Text
+    from tkiter.ttk import Button
+
     box = Toplevel(parent)
     box.title("Test ReplaceDialog")
     x, y = map(int, parent.geometry().split('+')[1:])
diff --git a/Lib/idlelib/search.py b/Lib/idlelib/search.py
--- a/Lib/idlelib/search.py
+++ b/Lib/idlelib/search.py
@@ -1,4 +1,4 @@
-from tkinter import *
+from tkinter import TclError
 
 from idlelib import searchengine
 from idlelib.searchbase import SearchDialogBase
@@ -72,7 +72,10 @@
 
 
 def _search_dialog(parent):  # htest #
-    '''Display search test box.'''
+    "Display search test box."
+    from tkinter import Toplevel, Text
+    from tkinter.ttk import Button
+
     box = Toplevel(parent)
     box.title("Test SearchDialog")
     x, y = map(int, parent.geometry().split('+')[1:])
@@ -82,9 +85,9 @@
     text.insert("insert","This is a sample string.\n"*5)
 
     def show_find():
-        text.tag_add(SEL, "1.0", END)
+        text.tag_add('sel', '1.0', 'end')
         _setup(text).open(text)
-        text.tag_remove(SEL, "1.0", END)
+        text.tag_remove('sel', '1.0', 'end')
 
     button = Button(box, text="Search (selection ignored)", command=show_find)
     button.pack()
diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py
--- a/Lib/idlelib/searchbase.py
+++ b/Lib/idlelib/searchbase.py
@@ -1,7 +1,7 @@
 '''Define SearchDialogBase used by Search, Replace, and Grep dialogs.'''
 
-from tkinter import (Toplevel, Frame, Entry, Label, Button,
-                     Checkbutton, Radiobutton)
+from tkinter import Toplevel, Frame
+from tkinter.ttk import Entry, Label, Button, Checkbutton, Radiobutton
 
 class SearchDialogBase:
     '''Create most of a 3 or 4 row, 3 column search dialog.
@@ -137,10 +137,8 @@
         if self.needwrapbutton:
             options.append((engine.wrapvar, "Wrap around"))
         for var, label in options:
-            btn = Checkbutton(frame, anchor="w", variable=var, text=label)
+            btn = Checkbutton(frame, variable=var, text=label)
             btn.pack(side="left", fill="both")
-            if var.get():
-                btn.select()
         return frame, options
 
     def create_other_buttons(self):
@@ -153,11 +151,8 @@
         var = self.engine.backvar
         others = [(1, 'Up'), (0, 'Down')]
         for val, label in others:
-            btn = Radiobutton(frame, anchor="w",
-                              variable=var, value=val, text=label)
+            btn = Radiobutton(frame, variable=var, value=val, text=label)
             btn.pack(side="left", fill="both")
-            if var.get() == val:
-                btn.select()
         return frame, others
 
     def make_button(self, label, command, isdef=0):
@@ -178,7 +173,26 @@
         b = self.make_button("close", self.close)
         b.lower()
 
+
+class _searchbase(SearchDialogBase):  # htest #
+    "Create auto-opening dialog with no text connection."
+
+    def __init__(self, parent):
+        import re
+        from idlelib import searchengine
+
+        self.root = parent
+        self.engine = searchengine.get(parent)
+        self.create_widgets()
+        print(parent.geometry())
+        width,height, x,y = list(map(int, re.split('[x+]', parent.geometry())))
+        self.top.geometry("+%d+%d" % (x + 40, y + 175))
+
+    def default_command(self): pass
+
 if __name__ == '__main__':
     import unittest
-    unittest.main(
-        'idlelib.idle_test.test_searchdialogbase', verbosity=2)
+    unittest.main('idlelib.idle_test.test_searchbase', verbosity=2, exit=False)
+
+    from idlelib.idle_test.htest import run
+    run(_searchbase)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list