]> granicus.if.org Git - python/commitdiff
Issue #27477: Convert IDLE search dialogs to using ttk widgets.
authorTerry Jan Reedy <tjreedy@udel.edu>
Mon, 11 Jul 2016 00:21:31 +0000 (20:21 -0400)
committerTerry Jan Reedy <tjreedy@udel.edu>
Mon, 11 Jul 2016 00:21:31 +0000 (20:21 -0400)
Lib/idlelib/grep.py
Lib/idlelib/idle_test/htest.py
Lib/idlelib/idle_test/test_searchbase.py
Lib/idlelib/replace.py
Lib/idlelib/search.py
Lib/idlelib/searchbase.py

index f1382c9d65b43e72289043cd202612cbb92d98ee..cfb0ea0ad8d362fd22b7b55c6d869ca3ca18244a 100644 (file)
@@ -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 @@ class GrepDialog(SearchDialogBase):
         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 @@ class GrepDialog(SearchDialogBase):
 
 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:])
index f5311e966c445dfe381c2e63f86e249b56cfcb3c..4d98924d9b4f5b6f926c5a546769cc9e33fdb2a0 100644 (file)
@@ -265,6 +265,13 @@ _search_dialog_spec = {
            "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': {},
index a0b1231ecdc2776dd2c9c5eb91af915c550872cf..d769fa2fc2f0defed0bac7d4c92bd7fbda2dbe9b 100644 (file)
@@ -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 @@ class SearchDialogBaseTest(unittest.TestCase):
                 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 @@ class SearchDialogBaseTest(unittest.TestCase):
                     # 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 @@ class SearchDialogBaseTest(unittest.TestCase):
         self.assertIn('close', closebuttoncommand)
 
 
-
 if __name__ == '__main__':
     unittest.main(verbosity=2, exit=2)
index a0acd41ed292b6b6715bfb378d3090529975f640..7c9573330fa1e8063ba08710736e4a9a068d362b 100644 (file)
@@ -3,7 +3,7 @@ Uses idlelib.SearchEngine for search capability.
 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 @@ class ReplaceDialog(SearchDialogBase):
 
 
 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:])
index 17a9ef36518f38a7e3fe896ce05965f90bc6c44e..4c2acef7b0aa399100c410d851c5c514af58ff7c 100644 (file)
@@ -1,4 +1,4 @@
-from tkinter import *
+from tkinter import TclError
 
 from idlelib import searchengine
 from idlelib.searchbase import SearchDialogBase
@@ -72,7 +72,10 @@ class SearchDialog(SearchDialogBase):
 
 
 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 @@ def _search_dialog(parent):  # htest #
     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()
index 9206bf5051880979853ecff5ed418fcf2c3422e8..cfb40520e7f79676d9df48a8bd2550822b0b1a36 100644 (file)
@@ -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 @@ class SearchDialogBase:
         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 @@ class SearchDialogBase:
         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 @@ class SearchDialogBase:
         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)