[Python-checkins] bpo-33987: IDLE - use ttk Frame for ttk widgets (GH-11395)
Miss Islington (bot)
webhook-mailer at python.org
Wed Jan 2 22:22:15 EST 2019
https://github.com/python/cpython/commit/b364caa39999658e843151602356e527851d6c68
commit: b364caa39999658e843151602356e527851d6c68
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019-01-02T19:22:10-08:00
summary:
bpo-33987: IDLE - use ttk Frame for ttk widgets (GH-11395)
(cherry picked from commit aff0adabf3ace62073076f4ce875ff568f2d3180)
Co-authored-by: Terry Jan Reedy <tjreedy at udel.edu>
files:
A Misc/NEWS.d/next/IDLE/2018-12-31-17-04-18.bpo-33987.fD92up.rst
M Lib/idlelib/autocomplete_w.py
M Lib/idlelib/config_key.py
M Lib/idlelib/configdialog.py
M Lib/idlelib/debugger.py
M Lib/idlelib/grep.py
M Lib/idlelib/idle_test/test_searchbase.py
M Lib/idlelib/query.py
M Lib/idlelib/replace.py
M Lib/idlelib/scrolledlist.py
M Lib/idlelib/search.py
M Lib/idlelib/searchbase.py
M Lib/idlelib/tree.py
diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py
index 9e0d336523d4..7994bc0db170 100644
--- a/Lib/idlelib/autocomplete_w.py
+++ b/Lib/idlelib/autocomplete_w.py
@@ -4,7 +4,7 @@
import platform
from tkinter import *
-from tkinter.ttk import Scrollbar
+from tkinter.ttk import Frame, Scrollbar
from idlelib.autocomplete import COMPLETE_FILES, COMPLETE_ATTRIBUTES
from idlelib.multicall import MC_SHIFT
diff --git a/Lib/idlelib/config_key.py b/Lib/idlelib/config_key.py
index 21e84a94c9ff..4478323fcc2c 100644
--- a/Lib/idlelib/config_key.py
+++ b/Lib/idlelib/config_key.py
@@ -2,7 +2,7 @@
Dialog for building Tkinter accelerator key bindings
"""
from tkinter import Toplevel, Listbox, Text, StringVar, TclError
-from tkinter.ttk import Button, Checkbutton, Entry, Frame, Label, Scrollbar
+from tkinter.ttk import Frame, Button, Checkbutton, Entry, Label, Scrollbar
from tkinter import messagebox
import string
import sys
diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py
index 229dc8987433..5fdaf82de4de 100644
--- a/Lib/idlelib/configdialog.py
+++ b/Lib/idlelib/configdialog.py
@@ -14,7 +14,7 @@
TOP, BOTTOM, RIGHT, LEFT, SOLID, GROOVE,
NONE, BOTH, X, Y, W, E, EW, NS, NSEW, NW,
HORIZONTAL, VERTICAL, ANCHOR, ACTIVE, END)
-from tkinter.ttk import (Button, Checkbutton, Entry, Frame, Label, LabelFrame,
+from tkinter.ttk import (Frame, LabelFrame, Button, Checkbutton, Entry, Label,
OptionMenu, Notebook, Radiobutton, Scrollbar, Style)
import tkinter.colorchooser as tkColorChooser
import tkinter.font as tkFont
diff --git a/Lib/idlelib/debugger.py b/Lib/idlelib/debugger.py
index 09f912c9af33..ccd03e46e161 100644
--- a/Lib/idlelib/debugger.py
+++ b/Lib/idlelib/debugger.py
@@ -2,7 +2,7 @@
import os
from tkinter import *
-from tkinter.ttk import Scrollbar
+from tkinter.ttk import Frame, Scrollbar
from idlelib import macosx
from idlelib.scrolledlist import ScrolledList
diff --git a/Lib/idlelib/grep.py b/Lib/idlelib/grep.py
index 8cc293c380de..873233ec1543 100644
--- a/Lib/idlelib/grep.py
+++ b/Lib/idlelib/grep.py
@@ -8,7 +8,7 @@
import sys
from tkinter import StringVar, BooleanVar
-from tkinter.ttk import Checkbutton
+from tkinter.ttk import Checkbutton # Frame imported in ...Base
from idlelib.searchbase import SearchDialogBase
from idlelib import searchengine
@@ -173,15 +173,18 @@ def findfiles(self, dir, base, rec):
def _grep_dialog(parent): # htest #
from tkinter import Toplevel, Text, SEL, END
- from tkinter.ttk import Button
+ from tkinter.ttk import Frame, Button
from idlelib.pyshell import PyShellFileList
+
top = Toplevel(parent)
top.title("Test GrepDialog")
x, y = map(int, parent.geometry().split('+')[1:])
top.geometry(f"+{x}+{y + 175}")
flist = PyShellFileList(top)
- text = Text(top, height=5)
+ frame = Frame(top)
+ frame.pack()
+ text = Text(frame, height=5)
text.pack()
def show_grep_dialog():
@@ -189,7 +192,7 @@ def show_grep_dialog():
grep(text, flist=flist)
text.tag_remove(SEL, "1.0", END)
- button = Button(top, text="Show GrepDialog", command=show_grep_dialog)
+ button = Button(frame, text="Show GrepDialog", command=show_grep_dialog)
button.pack()
if __name__ == "__main__":
diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py
index 46c3ad111d17..09a7fff51de1 100644
--- a/Lib/idlelib/idle_test/test_searchbase.py
+++ b/Lib/idlelib/idle_test/test_searchbase.py
@@ -4,7 +4,8 @@
import unittest
from test.support import requires
-from tkinter import Tk, Frame ##, BooleanVar, StringVar
+from tkinter import Tk
+from tkinter.ttk import Frame
from idlelib import searchengine as se
from idlelib import searchbase as sdb
from idlelib.idle_test.mock_idle import Func
@@ -97,11 +98,12 @@ def test_make_frame(self):
self.dialog.top = self.root
frame, label = self.dialog.make_frame()
self.assertEqual(label, '')
- self.assertIsInstance(frame, Frame)
+ self.assertEqual(str(type(frame)), "<class 'tkinter.ttk.Frame'>")
+ # self.assertIsInstance(frame, Frame) fails when test is run by
+ # test_idle not run from IDLE editor. See issue 33987 PR.
frame, label = self.dialog.make_frame('testlabel')
self.assertEqual(label['text'], 'testlabel')
- self.assertIsInstance(frame, Frame)
def btn_test_setup(self, meth):
self.dialog.top = self.root
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index c2628cceb739..f0b72553db87 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -1,6 +1,5 @@
"""
Dialogs that query users and verify the answer before accepting.
-Use ttk widgets, limiting use to tcl/tk 8.5+, as in IDLE 3.6+.
Query is the generic base class for a popup dialog.
The user must either enter a valid answer or close the dialog.
diff --git a/Lib/idlelib/replace.py b/Lib/idlelib/replace.py
index 83cf98756bdf..4a834eb7901e 100644
--- a/Lib/idlelib/replace.py
+++ b/Lib/idlelib/replace.py
@@ -205,12 +205,12 @@ def close(self, event=None):
def _replace_dialog(parent): # htest #
from tkinter import Toplevel, Text, END, SEL
- from tkinter.ttk import Button
+ from tkinter.ttk import Frame, Button
- box = Toplevel(parent)
- box.title("Test ReplaceDialog")
+ top = Toplevel(parent)
+ top.title("Test ReplaceDialog")
x, y = map(int, parent.geometry().split('+')[1:])
- box.geometry("+%d+%d" % (x, y + 175))
+ top.geometry("+%d+%d" % (x, y + 175))
# mock undo delegator methods
def undo_block_start():
@@ -219,7 +219,9 @@ def undo_block_start():
def undo_block_stop():
pass
- text = Text(box, inactiveselectbackground='gray')
+ frame = Frame(top)
+ frame.pack()
+ text = Text(frame, inactiveselectbackground='gray')
text.undo_block_start = undo_block_start
text.undo_block_stop = undo_block_stop
text.pack()
@@ -231,7 +233,7 @@ def show_replace():
replace(text)
text.tag_remove(SEL, "1.0", END)
- button = Button(box, text="Replace", command=show_replace)
+ button = Button(frame, text="Replace", command=show_replace)
button.pack()
if __name__ == '__main__':
diff --git a/Lib/idlelib/scrolledlist.py b/Lib/idlelib/scrolledlist.py
index 10229b636292..71fd18ab19ec 100644
--- a/Lib/idlelib/scrolledlist.py
+++ b/Lib/idlelib/scrolledlist.py
@@ -1,5 +1,5 @@
from tkinter import *
-from tkinter.ttk import Scrollbar
+from tkinter.ttk import Frame, Scrollbar
from idlelib import macosx
diff --git a/Lib/idlelib/search.py b/Lib/idlelib/search.py
index 6223661c8e08..6e5a0c7973c7 100644
--- a/Lib/idlelib/search.py
+++ b/Lib/idlelib/search.py
@@ -75,13 +75,16 @@ def find_selection(self, text):
def _search_dialog(parent): # htest #
"Display search test box."
from tkinter import Toplevel, Text
- from tkinter.ttk import Button
+ from tkinter.ttk import Frame, Button
- box = Toplevel(parent)
- box.title("Test SearchDialog")
+ top = Toplevel(parent)
+ top.title("Test SearchDialog")
x, y = map(int, parent.geometry().split('+')[1:])
- box.geometry("+%d+%d" % (x, y + 175))
- text = Text(box, inactiveselectbackground='gray')
+ top.geometry("+%d+%d" % (x, y + 175))
+
+ frame = Frame(top)
+ frame.pack()
+ text = Text(frame, inactiveselectbackground='gray')
text.pack()
text.insert("insert","This is a sample string.\n"*5)
@@ -90,7 +93,7 @@ def show_find():
_setup(text).open(text)
text.tag_remove('sel', '1.0', 'end')
- button = Button(box, text="Search (selection ignored)", command=show_find)
+ button = Button(frame, text="Search (selection ignored)", command=show_find)
button.pack()
if __name__ == '__main__':
diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py
index 348db660e3e9..f0e3d6f14ba4 100644
--- 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
-from tkinter.ttk import Entry, Label, Button, Checkbutton, Radiobutton
+from tkinter import Toplevel
+from tkinter.ttk import Frame, Entry, Label, Button, Checkbutton, Radiobutton
class SearchDialogBase:
diff --git a/Lib/idlelib/tree.py b/Lib/idlelib/tree.py
index 05f864657fb8..21426cbb33e0 100644
--- a/Lib/idlelib/tree.py
+++ b/Lib/idlelib/tree.py
@@ -17,7 +17,7 @@
import os
from tkinter import *
-from tkinter.ttk import Scrollbar
+from tkinter.ttk import Frame, Scrollbar
from idlelib.config import idleConf
from idlelib import zoomheight
diff --git a/Misc/NEWS.d/next/IDLE/2018-12-31-17-04-18.bpo-33987.fD92up.rst b/Misc/NEWS.d/next/IDLE/2018-12-31-17-04-18.bpo-33987.fD92up.rst
new file mode 100644
index 000000000000..289a65cf532c
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2018-12-31-17-04-18.bpo-33987.fD92up.rst
@@ -0,0 +1 @@
+Use ttk Frame for ttk widgets.
More information about the Python-checkins
mailing list