Skip to content

Commit 01e3575

Browse files
committed
Issue *24750: Switch all scrollbars in IDLE to ttk versions.
Where needed, add minimal tests to cover changes.
1 parent 96881cd commit 01e3575

17 files changed

+211
-39
lines changed

Lib/idlelib/autocomplete_w.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
An auto-completion window for IDLE, used by the autocomplete extension
33
"""
44
from tkinter import *
5+
from tkinter.ttk import Scrollbar
56
from idlelib.multicall import MC_SHIFT
67
from idlelib.autocomplete import COMPLETE_FILES, COMPLETE_ATTRIBUTES
78

Lib/idlelib/config_key.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,35 @@
22
Dialog for building Tkinter accelerator key bindings
33
"""
44
from tkinter import *
5+
from tkinter.ttk import Scrollbar
56
import tkinter.messagebox as tkMessageBox
67
import string
78
import sys
89

910
class GetKeysDialog(Toplevel):
10-
def __init__(self,parent,title,action,currentKeySequences,_htest=False):
11+
def __init__(self, parent, title, action, currentKeySequences,
12+
_htest=False, _utest=False):
1113
"""
1214
action - string, the name of the virtual event these keys will be
1315
mapped to
1416
currentKeys - list, a list of all key sequence lists currently mapped
1517
to virtual events, for overlap checking
18+
_utest - bool, do not wait when running unittest
1619
_htest - bool, change box location when running htest
1720
"""
1821
Toplevel.__init__(self, parent)
22+
self.withdraw() #hide while setting geometry
1923
self.configure(borderwidth=5)
20-
self.resizable(height=FALSE,width=FALSE)
24+
self.resizable(height=FALSE, width=FALSE)
2125
self.title(title)
2226
self.transient(parent)
2327
self.grab_set()
2428
self.protocol("WM_DELETE_WINDOW", self.Cancel)
2529
self.parent = parent
2630
self.action=action
27-
self.currentKeySequences=currentKeySequences
28-
self.result=''
29-
self.keyString=StringVar(self)
31+
self.currentKeySequences = currentKeySequences
32+
self.result = ''
33+
self.keyString = StringVar(self)
3034
self.keyString.set('')
3135
self.SetModifiersForPlatform() # set self.modifiers, self.modifier_label
3236
self.modifier_vars = []
@@ -37,7 +41,6 @@ def __init__(self,parent,title,action,currentKeySequences,_htest=False):
3741
self.advanced = False
3842
self.CreateWidgets()
3943
self.LoadFinalKeyList()
40-
self.withdraw() #hide while setting geometry
4144
self.update_idletasks()
4245
self.geometry(
4346
"+%d+%d" % (
@@ -47,8 +50,9 @@ def __init__(self,parent,title,action,currentKeySequences,_htest=False):
4750
((parent.winfo_height()/2 - self.winfo_reqheight()/2)
4851
if not _htest else 150)
4952
) ) #centre dialog over parent (or below htest box)
50-
self.deiconify() #geometry set, unhide
51-
self.wait_window()
53+
if not _utest:
54+
self.deiconify() #geometry set, unhide
55+
self.wait_window()
5256

5357
def CreateWidgets(self):
5458
frameMain = Frame(self,borderwidth=2,relief=SUNKEN)
@@ -261,6 +265,7 @@ def KeysOK(self):
261265
keysOK = True
262266
return keysOK
263267

268+
264269
if __name__ == '__main__':
265270
from idlelib.idle_test.htest import run
266271
run(GetKeysDialog)

Lib/idlelib/configdialog.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
1111
"""
1212
from tkinter import *
13+
from tkinter.ttk import Scrollbar
1314
import tkinter.messagebox as tkMessageBox
1415
import tkinter.colorchooser as tkColorChooser
1516
import tkinter.font as tkFont

Lib/idlelib/debugger.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import bdb
33
from tkinter import *
4+
from tkinter.ttk import Scrollbar
45
from idlelib.windows import ListedToplevel
56
from idlelib.scrolledlist import ScrolledList
67
from idlelib import macosx

Lib/idlelib/editor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import string
88
import sys
99
from tkinter import *
10+
from tkinter.ttk import Scrollbar
1011
import tkinter.simpledialog as tkSimpleDialog
1112
import tkinter.messagebox as tkMessageBox
1213
import traceback

Lib/idlelib/help.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,11 @@
2626
"""
2727
from html.parser import HTMLParser
2828
from os.path import abspath, dirname, isfile, join
29-
from tkinter import Toplevel, Frame, Text, Scrollbar, Menu, Menubutton
29+
from tkinter import Toplevel, Frame, Text, Menu
30+
from tkinter.ttk import Menubutton, Scrollbar
3031
from tkinter import font as tkfont
3132
from idlelib.config import idleConf
3233

33-
use_ttk = False # until available to import
34-
if use_ttk:
35-
from tkinter.ttk import Menubutton
36-
3734
## About IDLE ##
3835

3936

@@ -196,15 +193,18 @@ class HelpFrame(Frame):
196193
"Display html text, scrollbar, and toc."
197194
def __init__(self, parent, filename):
198195
Frame.__init__(self, parent)
199-
text = HelpText(self, filename)
196+
# keep references to widgets for test access.
197+
self.text = text = HelpText(self, filename)
200198
self['background'] = text['background']
201-
scroll = Scrollbar(self, command=text.yview)
199+
self.toc = toc = self.toc_menu(text)
200+
self.scroll = scroll = Scrollbar(self, command=text.yview)
202201
text['yscrollcommand'] = scroll.set
202+
203203
self.rowconfigure(0, weight=1)
204204
self.columnconfigure(1, weight=1) # text
205-
self.toc_menu(text).grid(column=0, row=0, sticky='nw')
206-
text.grid(column=1, row=0, sticky='nsew')
207-
scroll.grid(column=2, row=0, sticky='ns')
205+
toc.grid(row=0, column=0, sticky='nw')
206+
text.grid(row=0, column=1, sticky='nsew')
207+
scroll.grid(row=0, column=2, sticky='ns')
208208

209209
def toc_menu(self, text):
210210
"Create table of contents as drop-down menu."
@@ -265,7 +265,7 @@ def show_idlehelp(parent):
265265
if not isfile(filename):
266266
# try copy_strip, present message
267267
return
268-
HelpWindow(parent, filename, 'IDLE Help')
268+
return HelpWindow(parent, filename, 'IDLE Help')
269269

270270
if __name__ == '__main__':
271271
from idlelib.idle_test.htest import run

Lib/idlelib/idle_test/htest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def _wrapper(parent): # htest #
6868
from importlib import import_module
6969
from idlelib.macosx import _init_tk_type
7070
import tkinter as tk
71+
from tkinter.ttk import Scrollbar
7172

7273
AboutDialog_spec = {
7374
'file': 'help_about',
@@ -344,7 +345,7 @@ def run(*tests):
344345
frameLabel.pack()
345346
text = tk.Text(frameLabel, wrap='word')
346347
text.configure(bg=root.cget('bg'), relief='flat', height=4, width=70)
347-
scrollbar = tk.Scrollbar(frameLabel, command=text.yview)
348+
scrollbar = Scrollbar(frameLabel, command=text.yview)
348349
text.config(yscrollcommand=scrollbar.set)
349350
scrollbar.pack(side='right', fill='y', expand=False)
350351
text.pack(side='left', fill='both', expand=True)

Lib/idlelib/idle_test/test_autocomplete.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
''' Test autocomplete and autocomple_w
2+
3+
Coverage of autocomple: 56%
4+
'''
15
import unittest
26
from test.support import requires
37
from tkinter import Tk, Text
48

59
import idlelib.autocomplete as ac
610
import idlelib.autocomplete_w as acw
7-
import idlelib.macosx as mac
11+
from idlelib import macosx
812
from idlelib.idle_test.mock_idle import Func
913
from idlelib.idle_test.mock_tk import Event
1014

@@ -27,7 +31,7 @@ class AutoCompleteTest(unittest.TestCase):
2731
def setUpClass(cls):
2832
requires('gui')
2933
cls.root = Tk()
30-
mac.setupApp(cls.root, None)
34+
macosx.setupApp(cls.root, None)
3135
cls.text = Text(cls.root)
3236
cls.editor = DummyEditwin(cls.root, cls.text)
3337

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
''' Test idlelib.config_key.
2+
3+
Coverage: 56%
4+
'''
5+
from idlelib import config_key
6+
from test.support import requires
7+
requires('gui')
8+
import unittest
9+
from tkinter import Tk, Text
10+
11+
12+
class GetKeysTest(unittest.TestCase):
13+
14+
@classmethod
15+
def setUpClass(cls):
16+
cls.root = Tk()
17+
18+
@classmethod
19+
def tearDownClass(cls):
20+
cls.root.destroy()
21+
del cls.root
22+
23+
24+
def test_init(self):
25+
dia = config_key.GetKeysDialog(
26+
self.root, 'test', '<<Test>>', ['<Key-F12>'], _utest=True)
27+
dia.Cancel()
28+
29+
30+
if __name__ == '__main__':
31+
unittest.main(verbosity=2)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
''' Test idlelib.debugger.
2+
3+
Coverage: 19%
4+
'''
5+
from idlelib import debugger
6+
from test.support import requires
7+
requires('gui')
8+
import unittest
9+
from tkinter import Tk
10+
11+
12+
class NameSpaceTest(unittest.TestCase):
13+
14+
@classmethod
15+
def setUpClass(cls):
16+
cls.root = Tk()
17+
cls.root.withdraw()
18+
19+
@classmethod
20+
def tearDownClass(cls):
21+
cls.root.destroy()
22+
del cls.root
23+
24+
def test_init(self):
25+
debugger.NamespaceViewer(self.root, 'Test')
26+
27+
28+
if __name__ == '__main__':
29+
unittest.main(verbosity=2)

0 commit comments

Comments
 (0)