Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 879986d

Browse files
authoredJan 25, 2021
bpo-43013: Fix old tkinter module names in idlelib (pythonGH-24326)
Lowercase 'tkColorChooser', 'tkFileDialog', 'tkSimpleDialog', and 'tkMessageBox' and remove 'tk'. Just lowercase 'tkFont' as 'font' is already used. Adjust import.
1 parent cf19cc3 commit 879986d

13 files changed

+66
-67
lines changed
 

‎Lib/idlelib/configdialog.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
HORIZONTAL, VERTICAL, ANCHOR, ACTIVE, END)
1919
from tkinter.ttk import (Frame, LabelFrame, Button, Checkbutton, Entry, Label,
2020
OptionMenu, Notebook, Radiobutton, Scrollbar, Style)
21-
import tkinter.colorchooser as tkColorChooser
22-
import tkinter.font as tkFont
21+
from tkinter import colorchooser
22+
import tkinter.font as tkfont
2323
from tkinter import messagebox
2424

2525
from idlelib.config import idleConf, ConfigChanges
@@ -609,7 +609,7 @@ def load_font_cfg(self):
609609
font_bold = configured_font[2]=='bold'
610610

611611
# Set sorted no-duplicate editor font selection list and font_name.
612-
fonts = sorted(set(tkFont.families(self)))
612+
fonts = sorted(set(tkfont.families(self)))
613613
for font in fonts:
614614
self.fontlist.insert(END, font)
615615
self.font_name.set(font_name)
@@ -663,7 +663,7 @@ def set_samples(self, event=None):
663663
Updates font_sample and highlight page highlight_sample.
664664
"""
665665
font_name = self.font_name.get()
666-
font_weight = tkFont.BOLD if self.font_bold.get() else tkFont.NORMAL
666+
font_weight = tkfont.BOLD if self.font_bold.get() else tkfont.NORMAL
667667
new_font = (font_name, self.font_size.get(), font_weight)
668668
self.font_sample['font'] = new_font
669669
self.highlight_sample['font'] = new_font
@@ -1100,7 +1100,7 @@ def get_color(self):
11001100
target = self.highlight_target.get()
11011101
prev_color = self.style.lookup(self.frame_color_set['style'],
11021102
'background')
1103-
rgbTuplet, color_string = tkColorChooser.askcolor(
1103+
rgbTuplet, color_string = colorchooser.askcolor(
11041104
parent=self, title='Pick new color for : '+target,
11051105
initialcolor=prev_color)
11061106
if color_string and (color_string != prev_color):

‎Lib/idlelib/editor.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
from tkinter import *
1313
from tkinter.font import Font
1414
from tkinter.ttk import Scrollbar
15-
import tkinter.simpledialog as tkSimpleDialog
16-
import tkinter.messagebox as tkMessageBox
15+
from tkinter import simpledialog
16+
from tkinter import messagebox
1717

1818
from idlelib.config import idleConf
1919
from idlelib import configdialog
@@ -295,9 +295,9 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
295295
window.register_callback(self.postwindowsmenu)
296296

297297
# Some abstractions so IDLE extensions are cross-IDE
298-
self.askyesno = tkMessageBox.askyesno
299-
self.askinteger = tkSimpleDialog.askinteger
300-
self.showerror = tkMessageBox.showerror
298+
self.askinteger = simpledialog.askinteger
299+
self.askyesno = messagebox.askyesno
300+
self.showerror = messagebox.showerror
301301

302302
# Add pseudoevents for former extension fixed keys.
303303
# (This probably needs to be done once in the process.)
@@ -596,7 +596,7 @@ def python_docs(self, event=None):
596596
try:
597597
os.startfile(self.help_url)
598598
except OSError as why:
599-
tkMessageBox.showerror(title='Document Start Failure',
599+
messagebox.showerror(title='Document Start Failure',
600600
message=str(why), parent=self.text)
601601
else:
602602
webbrowser.open(self.help_url)
@@ -927,7 +927,7 @@ def display_extra_help(helpfile=helpfile):
927927
try:
928928
os.startfile(helpfile)
929929
except OSError as why:
930-
tkMessageBox.showerror(title='Document Start Failure',
930+
messagebox.showerror(title='Document Start Failure',
931931
message=str(why), parent=self.text)
932932
else:
933933
webbrowser.open(helpfile)
@@ -963,7 +963,7 @@ def update_recent_files_list(self, new_file=None):
963963
except OSError as err:
964964
if not getattr(self.root, "recentfiles_message", False):
965965
self.root.recentfiles_message = True
966-
tkMessageBox.showwarning(title='IDLE Warning',
966+
messagebox.showwarning(title='IDLE Warning',
967967
message="Cannot save Recent Files list to disk.\n"
968968
f" {err}\n"
969969
"Select OK to continue.",

‎Lib/idlelib/filelist.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"idlelib.filelist"
22

33
import os
4-
from tkinter import messagebox as tkMessageBox
4+
from tkinter import messagebox
55

66

77
class FileList:
@@ -20,7 +20,7 @@ def open(self, filename, action=None):
2020
filename = self.canonize(filename)
2121
if os.path.isdir(filename):
2222
# This can happen when bad filename is passed on command line:
23-
tkMessageBox.showerror(
23+
messagebox.showerror(
2424
"File Error",
2525
"%r is a directory." % (filename,),
2626
master=self.root)
@@ -88,7 +88,7 @@ def filename_changed_edit(self, edit):
8888
if newkey in self.dict:
8989
conflict = self.dict[newkey]
9090
self.inversedict[conflict] = None
91-
tkMessageBox.showerror(
91+
messagebox.showerror(
9292
"Name Conflict",
9393
"You now have multiple edit windows open for %r" % (filename,),
9494
master=self.root)

‎Lib/idlelib/idle_test/mock_tk.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,26 @@ def __call__(self, title, message, *args, **kwds):
5959
class Mbox:
6060
"""Mock for tkinter.messagebox with an Mbox_func for each function.
6161
62-
This module was 'tkMessageBox' in 2.x; hence the 'import as' in 3.x.
6362
Example usage in test_module.py for testing functions in module.py:
6463
---
6564
from idlelib.idle_test.mock_tk import Mbox
6665
import module
6766
68-
orig_mbox = module.tkMessageBox
67+
orig_mbox = module.messagebox
6968
showerror = Mbox.showerror # example, for attribute access in test methods
7069
7170
class Test(unittest.TestCase):
7271
7372
@classmethod
7473
def setUpClass(cls):
75-
module.tkMessageBox = Mbox
74+
module.messagebox = Mbox
7675
7776
@classmethod
7877
def tearDownClass(cls):
79-
module.tkMessageBox = orig_mbox
78+
module.messagebox = orig_mbox
8079
---
8180
For 'ask' functions, set func.result return value before calling the method
82-
that uses the message function. When tkMessageBox functions are the
81+
that uses the message function. When messagebox functions are the
8382
only gui alls in a method, this replacement makes the method gui-free,
8483
"""
8584
askokcancel = Mbox_func() # True or False

‎Lib/idlelib/idle_test/test_configdialog.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ def test_custom_name(self):
423423
def test_color(self):
424424
d = self.page
425425
d.on_new_color_set = Func()
426-
# self.color is only set in get_color through ColorChooser.
426+
# self.color is only set in get_color through colorchooser.
427427
d.color.set('green')
428428
self.assertEqual(d.on_new_color_set.called, 1)
429429
del d.on_new_color_set
@@ -540,8 +540,8 @@ def test_set_theme_type(self):
540540
def test_get_color(self):
541541
eq = self.assertEqual
542542
d = self.page
543-
orig_chooser = configdialog.tkColorChooser.askcolor
544-
chooser = configdialog.tkColorChooser.askcolor = Func()
543+
orig_chooser = configdialog.colorchooser.askcolor
544+
chooser = configdialog.colorchooser.askcolor = Func()
545545
gntn = d.get_new_theme_name = Func()
546546

547547
d.highlight_target.set('Editor Breakpoint')
@@ -582,7 +582,7 @@ def test_get_color(self):
582582
eq(d.color.get(), '#de0000')
583583

584584
del d.get_new_theme_name
585-
configdialog.tkColorChooser.askcolor = orig_chooser
585+
configdialog.colorchooser.askcolor = orig_chooser
586586

587587
def test_on_new_color_set(self):
588588
d = self.page

‎Lib/idlelib/idle_test/test_replace.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from idlelib.idle_test.mock_tk import Mbox
1111
import idlelib.searchengine as se
1212

13-
orig_mbox = se.tkMessageBox
13+
orig_mbox = se.messagebox
1414
showerror = Mbox.showerror
1515

1616

@@ -20,7 +20,7 @@ class ReplaceDialogTest(unittest.TestCase):
2020
def setUpClass(cls):
2121
cls.root = Tk()
2222
cls.root.withdraw()
23-
se.tkMessageBox = Mbox
23+
se.messagebox = Mbox
2424
cls.engine = se.SearchEngine(cls.root)
2525
cls.dialog = ReplaceDialog(cls.root, cls.engine)
2626
cls.dialog.bell = lambda: None
@@ -32,7 +32,7 @@ def setUpClass(cls):
3232

3333
@classmethod
3434
def tearDownClass(cls):
35-
se.tkMessageBox = orig_mbox
35+
se.messagebox = orig_mbox
3636
del cls.text, cls.dialog, cls.engine
3737
cls.root.destroy()
3838
del cls.root

‎Lib/idlelib/idle_test/test_searchengine.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import unittest
55
# from test.support import requires
66
from tkinter import BooleanVar, StringVar, TclError # ,Tk, Text
7-
import tkinter.messagebox as tkMessageBox
7+
from tkinter import messagebox
88
from idlelib.idle_test.mock_tk import Var, Mbox
99
from idlelib.idle_test.mock_tk import Text as mockText
1010
import re
@@ -19,13 +19,13 @@ def setUpModule():
1919
# Replace s-e module tkinter imports other than non-gui TclError.
2020
se.BooleanVar = Var
2121
se.StringVar = Var
22-
se.tkMessageBox = Mbox
22+
se.messagebox = Mbox
2323

2424
def tearDownModule():
2525
# Restore 'just in case', though other tests should also replace.
2626
se.BooleanVar = BooleanVar
2727
se.StringVar = StringVar
28-
se.tkMessageBox = tkMessageBox
28+
se.messagebox = messagebox
2929

3030

3131
class Mock:

‎Lib/idlelib/idle_test/test_squeezer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ def test_expand_dangerous_oupput(self):
396396
expandingbutton.base_text = expandingbutton.text
397397

398398
# Patch the message box module to always return False.
399-
with patch('idlelib.squeezer.tkMessageBox') as mock_msgbox:
399+
with patch('idlelib.squeezer.messagebox') as mock_msgbox:
400400
mock_msgbox.askokcancel.return_value = False
401401
mock_msgbox.askyesno.return_value = False
402402
# Trigger the expand event.
@@ -407,7 +407,7 @@ def test_expand_dangerous_oupput(self):
407407
self.assertEqual(expandingbutton.text.get('1.0', 'end-1c'), '')
408408

409409
# Patch the message box module to always return True.
410-
with patch('idlelib.squeezer.tkMessageBox') as mock_msgbox:
410+
with patch('idlelib.squeezer.messagebox') as mock_msgbox:
411411
mock_msgbox.askokcancel.return_value = True
412412
mock_msgbox.askyesno.return_value = True
413413
# Trigger the expand event.

‎Lib/idlelib/iomenu.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import tempfile
66
import tokenize
77

8-
import tkinter.filedialog as tkFileDialog
9-
import tkinter.messagebox as tkMessageBox
8+
from tkinter import filedialog
9+
from tkinter import messagebox
1010
from tkinter.simpledialog import askstring
1111

1212
import idlelib
@@ -147,10 +147,10 @@ def loadfile(self, filename):
147147
eol_convention = f.newlines
148148
converted = True
149149
except OSError as err:
150-
tkMessageBox.showerror("I/O Error", str(err), parent=self.text)
150+
messagebox.showerror("I/O Error", str(err), parent=self.text)
151151
return False
152152
except UnicodeDecodeError:
153-
tkMessageBox.showerror("Decoding Error",
153+
messagebox.showerror("Decoding Error",
154154
"File %s\nFailed to Decode" % filename,
155155
parent=self.text)
156156
return False
@@ -159,7 +159,7 @@ def loadfile(self, filename):
159159
# If the file does not contain line separators, it is None.
160160
# If the file contains mixed line separators, it is a tuple.
161161
if eol_convention is not None:
162-
tkMessageBox.showwarning("Mixed Newlines",
162+
messagebox.showwarning("Mixed Newlines",
163163
"Mixed newlines detected.\n"
164164
"The file will be changed on save.",
165165
parent=self.text)
@@ -187,10 +187,10 @@ def maybesave(self):
187187
return "yes"
188188
message = "Do you want to save %s before closing?" % (
189189
self.filename or "this untitled document")
190-
confirm = tkMessageBox.askyesnocancel(
190+
confirm = messagebox.askyesnocancel(
191191
title="Save On Close",
192192
message=message,
193-
default=tkMessageBox.YES,
193+
default=messagebox.YES,
194194
parent=self.text)
195195
if confirm:
196196
reply = "yes"
@@ -249,7 +249,7 @@ def writefile(self, filename):
249249
os.fsync(f.fileno())
250250
return True
251251
except OSError as msg:
252-
tkMessageBox.showerror("I/O Error", str(msg),
252+
messagebox.showerror("I/O Error", str(msg),
253253
parent=self.text)
254254
return False
255255

@@ -286,7 +286,7 @@ def encode(self, chars):
286286
failed = str(err)
287287
except UnicodeEncodeError:
288288
failed = "Invalid encoding '%s'" % enc
289-
tkMessageBox.showerror(
289+
messagebox.showerror(
290290
"I/O Error",
291291
"%s.\nSaving as UTF-8" % failed,
292292
parent=self.text)
@@ -295,10 +295,10 @@ def encode(self, chars):
295295
return chars.encode('utf-8-sig')
296296

297297
def print_window(self, event):
298-
confirm = tkMessageBox.askokcancel(
298+
confirm = messagebox.askokcancel(
299299
title="Print",
300300
message="Print to Default Printer",
301-
default=tkMessageBox.OK,
301+
default=messagebox.OK,
302302
parent=self.text)
303303
if not confirm:
304304
self.text.focus_set()
@@ -336,10 +336,10 @@ def print_window(self, event):
336336
status + output
337337
if output:
338338
output = "Printing command: %s\n" % repr(command) + output
339-
tkMessageBox.showerror("Print status", output, parent=self.text)
339+
messagebox.showerror("Print status", output, parent=self.text)
340340
else: #no printing for this platform
341341
message = "Printing is not enabled for this platform: %s" % platform
342-
tkMessageBox.showinfo("Print status", message, parent=self.text)
342+
messagebox.showinfo("Print status", message, parent=self.text)
343343
if tempfilename:
344344
os.unlink(tempfilename)
345345
return "break"
@@ -358,7 +358,7 @@ def print_window(self, event):
358358
def askopenfile(self):
359359
dir, base = self.defaultfilename("open")
360360
if not self.opendialog:
361-
self.opendialog = tkFileDialog.Open(parent=self.text,
361+
self.opendialog = filedialog.Open(parent=self.text,
362362
filetypes=self.filetypes)
363363
filename = self.opendialog.show(initialdir=dir, initialfile=base)
364364
return filename
@@ -378,7 +378,7 @@ def defaultfilename(self, mode="open"):
378378
def asksavefile(self):
379379
dir, base = self.defaultfilename("save")
380380
if not self.savedialog:
381-
self.savedialog = tkFileDialog.SaveAs(
381+
self.savedialog = filedialog.SaveAs(
382382
parent=self.text,
383383
filetypes=self.filetypes,
384384
defaultextension=self.defaultextension)

‎Lib/idlelib/pyshell.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121
except (ImportError, AttributeError, OSError):
2222
pass
2323

24-
import tkinter.messagebox as tkMessageBox
24+
from tkinter import messagebox
2525
if TkVersion < 8.5:
2626
root = Tk() # otherwise create root in main
2727
root.withdraw()
2828
from idlelib.run import fix_scaling
2929
fix_scaling(root)
30-
tkMessageBox.showerror("Idle Cannot Start",
30+
messagebox.showerror("Idle Cannot Start",
3131
"Idle requires tcl/tk 8.5+, not %s." % TkVersion,
3232
parent=root)
3333
raise SystemExit(1)
@@ -261,7 +261,7 @@ def store_file_breaks(self):
261261
except OSError as err:
262262
if not getattr(self.root, "breakpoint_error_displayed", False):
263263
self.root.breakpoint_error_displayed = True
264-
tkMessageBox.showerror(title='IDLE Error',
264+
messagebox.showerror(title='IDLE Error',
265265
message='Unable to update breakpoint list:\n%s'
266266
% str(err),
267267
parent=self.text)
@@ -771,7 +771,7 @@ def runcode(self, code):
771771
exec(code, self.locals)
772772
except SystemExit:
773773
if not self.tkconsole.closing:
774-
if tkMessageBox.askyesno(
774+
if messagebox.askyesno(
775775
"Exit?",
776776
"Do you want to exit altogether?",
777777
default="yes",
@@ -805,7 +805,7 @@ def write(self, s):
805805
return self.tkconsole.stderr.write(s)
806806

807807
def display_port_binding_error(self):
808-
tkMessageBox.showerror(
808+
messagebox.showerror(
809809
"Port Binding Error",
810810
"IDLE can't bind to a TCP/IP port, which is necessary to "
811811
"communicate with its Python execution server. This might be "
@@ -816,15 +816,15 @@ def display_port_binding_error(self):
816816
parent=self.tkconsole.text)
817817

818818
def display_no_subprocess_error(self):
819-
tkMessageBox.showerror(
819+
messagebox.showerror(
820820
"Subprocess Connection Error",
821821
"IDLE's subprocess didn't make connection.\n"
822822
"See the 'Startup failure' section of the IDLE doc, online at\n"
823823
"https://docs.python.org/3/library/idle.html#startup-failure",
824824
parent=self.tkconsole.text)
825825

826826
def display_executing_dialog(self):
827-
tkMessageBox.showerror(
827+
messagebox.showerror(
828828
"Already executing",
829829
"The Python Shell window is already executing a command; "
830830
"please wait until it is finished.",
@@ -945,7 +945,7 @@ def get_warning_stream(self):
945945

946946
def toggle_debugger(self, event=None):
947947
if self.executing:
948-
tkMessageBox.showerror("Don't debug now",
948+
messagebox.showerror("Don't debug now",
949949
"You can only toggle the debugger when idle",
950950
parent=self.text)
951951
self.set_debugger_indicator()
@@ -1003,7 +1003,7 @@ def endexecuting(self):
10031003
def close(self):
10041004
"Extend EditorWindow.close()"
10051005
if self.executing:
1006-
response = tkMessageBox.askokcancel(
1006+
response = messagebox.askokcancel(
10071007
"Kill?",
10081008
"Your program is still running!\n Do you want to kill it?",
10091009
default="ok",
@@ -1254,7 +1254,7 @@ def open_stack_viewer(self, event=None):
12541254
try:
12551255
sys.last_traceback
12561256
except:
1257-
tkMessageBox.showerror("No stack trace",
1257+
messagebox.showerror("No stack trace",
12581258
"There is no stack trace yet.\n"
12591259
"(sys.last_traceback is not defined)",
12601260
parent=self.text)

‎Lib/idlelib/runscript.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import time
1515
import tokenize
1616

17-
import tkinter.messagebox as tkMessageBox
17+
from tkinter import messagebox
1818

1919
from idlelib.config import idleConf
2020
from idlelib import macosx
@@ -195,15 +195,15 @@ def getfilename(self):
195195

196196
def ask_save_dialog(self):
197197
msg = "Source Must Be Saved\n" + 5*' ' + "OK to Save?"
198-
confirm = tkMessageBox.askokcancel(title="Save Before Run or Check",
198+
confirm = messagebox.askokcancel(title="Save Before Run or Check",
199199
message=msg,
200-
default=tkMessageBox.OK,
200+
default=messagebox.OK,
201201
parent=self.editwin.text)
202202
return confirm
203203

204204
def errorbox(self, title, message):
205205
# XXX This should really be a function of EditorWindow...
206-
tkMessageBox.showerror(title, message, parent=self.editwin.text)
206+
messagebox.showerror(title, message, parent=self.editwin.text)
207207
self.editwin.text.focus_set()
208208
self.perf = time.perf_counter()
209209

‎Lib/idlelib/searchengine.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import re
33

44
from tkinter import StringVar, BooleanVar, TclError
5-
import tkinter.messagebox as tkMessageBox
5+
from tkinter import messagebox
66

77
def get(root):
88
'''Return the singleton SearchEngine instance for the process.
@@ -96,7 +96,7 @@ def report_error(self, pat, msg, col=None):
9696
msg = msg + "\nPattern: " + str(pat)
9797
if col is not None:
9898
msg = msg + "\nOffset: " + str(col)
99-
tkMessageBox.showerror("Regular expression error",
99+
messagebox.showerror("Regular expression error",
100100
msg, master=self.root)
101101

102102
def search_text(self, text, prog=None, ok=0):

‎Lib/idlelib/squeezer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import re
1818

1919
import tkinter as tk
20-
import tkinter.messagebox as tkMessageBox
20+
from tkinter import messagebox
2121

2222
from idlelib.config import idleConf
2323
from idlelib.textview import view_text
@@ -147,15 +147,15 @@ def expand(self, event=None):
147147
if self.is_dangerous is None:
148148
self.set_is_dangerous()
149149
if self.is_dangerous:
150-
confirm = tkMessageBox.askokcancel(
150+
confirm = messagebox.askokcancel(
151151
title="Expand huge output?",
152152
message="\n\n".join([
153153
"The squeezed output is very long: %d lines, %d chars.",
154154
"Expanding it could make IDLE slow or unresponsive.",
155155
"It is recommended to view or copy the output instead.",
156156
"Really expand?"
157157
]) % (self.numoflines, len(self.s)),
158-
default=tkMessageBox.CANCEL,
158+
default=messagebox.CANCEL,
159159
parent=self.text)
160160
if not confirm:
161161
return "break"

0 commit comments

Comments
 (0)
Please sign in to comment.