[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

AltStyle によって変換されたページ (->オリジナル) /