bpo-43013: Fix old tkinter module names in idlelib (GH-24326)

Lowercase 'tkColorChooser', 'tkFileDialog', 'tkSimpleDialog', and
'tkMessageBox' and remove 'tk'.  Just lowercase 'tkFont' as 'font'
is already used.  Adjust import.
This commit is contained in:
Terry Jan Reedy 2021-01-25 06:33:18 -05:00 committed by GitHub
parent cf19cc3b92
commit 879986d8a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 66 additions and 67 deletions

View file

@ -18,8 +18,8 @@
HORIZONTAL, VERTICAL, ANCHOR, ACTIVE, END)
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
from tkinter import colorchooser
import tkinter.font as tkfont
from tkinter import messagebox
from idlelib.config import idleConf, ConfigChanges
@ -609,7 +609,7 @@ def load_font_cfg(self):
font_bold = configured_font[2]=='bold'
# Set sorted no-duplicate editor font selection list and font_name.
fonts = sorted(set(tkFont.families(self)))
fonts = sorted(set(tkfont.families(self)))
for font in fonts:
self.fontlist.insert(END, font)
self.font_name.set(font_name)
@ -663,7 +663,7 @@ def set_samples(self, event=None):
Updates font_sample and highlight page highlight_sample.
"""
font_name = self.font_name.get()
font_weight = tkFont.BOLD if self.font_bold.get() else tkFont.NORMAL
font_weight = tkfont.BOLD if self.font_bold.get() else tkfont.NORMAL
new_font = (font_name, self.font_size.get(), font_weight)
self.font_sample['font'] = new_font
self.highlight_sample['font'] = new_font
@ -1100,7 +1100,7 @@ def get_color(self):
target = self.highlight_target.get()
prev_color = self.style.lookup(self.frame_color_set['style'],
'background')
rgbTuplet, color_string = tkColorChooser.askcolor(
rgbTuplet, color_string = colorchooser.askcolor(
parent=self, title='Pick new color for : '+target,
initialcolor=prev_color)
if color_string and (color_string != prev_color):

View file

@ -12,8 +12,8 @@
from tkinter import *
from tkinter.font import Font
from tkinter.ttk import Scrollbar
import tkinter.simpledialog as tkSimpleDialog
import tkinter.messagebox as tkMessageBox
from tkinter import simpledialog
from tkinter import messagebox
from idlelib.config import idleConf
from idlelib import configdialog
@ -295,9 +295,9 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
window.register_callback(self.postwindowsmenu)
# Some abstractions so IDLE extensions are cross-IDE
self.askyesno = tkMessageBox.askyesno
self.askinteger = tkSimpleDialog.askinteger
self.showerror = tkMessageBox.showerror
self.askinteger = simpledialog.askinteger
self.askyesno = messagebox.askyesno
self.showerror = messagebox.showerror
# Add pseudoevents for former extension fixed keys.
# (This probably needs to be done once in the process.)
@ -596,7 +596,7 @@ def python_docs(self, event=None):
try:
os.startfile(self.help_url)
except OSError as why:
tkMessageBox.showerror(title='Document Start Failure',
messagebox.showerror(title='Document Start Failure',
message=str(why), parent=self.text)
else:
webbrowser.open(self.help_url)
@ -927,7 +927,7 @@ def display_extra_help(helpfile=helpfile):
try:
os.startfile(helpfile)
except OSError as why:
tkMessageBox.showerror(title='Document Start Failure',
messagebox.showerror(title='Document Start Failure',
message=str(why), parent=self.text)
else:
webbrowser.open(helpfile)
@ -963,7 +963,7 @@ def update_recent_files_list(self, new_file=None):
except OSError as err:
if not getattr(self.root, "recentfiles_message", False):
self.root.recentfiles_message = True
tkMessageBox.showwarning(title='IDLE Warning',
messagebox.showwarning(title='IDLE Warning',
message="Cannot save Recent Files list to disk.\n"
f" {err}\n"
"Select OK to continue.",

View file

@ -1,7 +1,7 @@
"idlelib.filelist"
import os
from tkinter import messagebox as tkMessageBox
from tkinter import messagebox
class FileList:
@ -20,7 +20,7 @@ def open(self, filename, action=None):
filename = self.canonize(filename)
if os.path.isdir(filename):
# This can happen when bad filename is passed on command line:
tkMessageBox.showerror(
messagebox.showerror(
"File Error",
"%r is a directory." % (filename,),
master=self.root)
@ -88,7 +88,7 @@ def filename_changed_edit(self, edit):
if newkey in self.dict:
conflict = self.dict[newkey]
self.inversedict[conflict] = None
tkMessageBox.showerror(
messagebox.showerror(
"Name Conflict",
"You now have multiple edit windows open for %r" % (filename,),
master=self.root)

View file

@ -59,27 +59,26 @@ def __call__(self, title, message, *args, **kwds):
class Mbox:
"""Mock for tkinter.messagebox with an Mbox_func for each function.
This module was 'tkMessageBox' in 2.x; hence the 'import as' in 3.x.
Example usage in test_module.py for testing functions in module.py:
---
from idlelib.idle_test.mock_tk import Mbox
import module
orig_mbox = module.tkMessageBox
orig_mbox = module.messagebox
showerror = Mbox.showerror # example, for attribute access in test methods
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
module.tkMessageBox = Mbox
module.messagebox = Mbox
@classmethod
def tearDownClass(cls):
module.tkMessageBox = orig_mbox
module.messagebox = orig_mbox
---
For 'ask' functions, set func.result return value before calling the method
that uses the message function. When tkMessageBox functions are the
that uses the message function. When messagebox functions are the
only gui alls in a method, this replacement makes the method gui-free,
"""
askokcancel = Mbox_func() # True or False

View file

@ -423,7 +423,7 @@ def test_custom_name(self):
def test_color(self):
d = self.page
d.on_new_color_set = Func()
# self.color is only set in get_color through ColorChooser.
# self.color is only set in get_color through colorchooser.
d.color.set('green')
self.assertEqual(d.on_new_color_set.called, 1)
del d.on_new_color_set
@ -540,8 +540,8 @@ def test_set_theme_type(self):
def test_get_color(self):
eq = self.assertEqual
d = self.page
orig_chooser = configdialog.tkColorChooser.askcolor
chooser = configdialog.tkColorChooser.askcolor = Func()
orig_chooser = configdialog.colorchooser.askcolor
chooser = configdialog.colorchooser.askcolor = Func()
gntn = d.get_new_theme_name = Func()
d.highlight_target.set('Editor Breakpoint')
@ -582,7 +582,7 @@ def test_get_color(self):
eq(d.color.get(), '#de0000')
del d.get_new_theme_name
configdialog.tkColorChooser.askcolor = orig_chooser
configdialog.colorchooser.askcolor = orig_chooser
def test_on_new_color_set(self):
d = self.page

View file

@ -10,7 +10,7 @@
from idlelib.idle_test.mock_tk import Mbox
import idlelib.searchengine as se
orig_mbox = se.tkMessageBox
orig_mbox = se.messagebox
showerror = Mbox.showerror
@ -20,7 +20,7 @@ class ReplaceDialogTest(unittest.TestCase):
def setUpClass(cls):
cls.root = Tk()
cls.root.withdraw()
se.tkMessageBox = Mbox
se.messagebox = Mbox
cls.engine = se.SearchEngine(cls.root)
cls.dialog = ReplaceDialog(cls.root, cls.engine)
cls.dialog.bell = lambda: None
@ -32,7 +32,7 @@ def setUpClass(cls):
@classmethod
def tearDownClass(cls):
se.tkMessageBox = orig_mbox
se.messagebox = orig_mbox
del cls.text, cls.dialog, cls.engine
cls.root.destroy()
del cls.root

View file

@ -4,7 +4,7 @@
import unittest
# from test.support import requires
from tkinter import BooleanVar, StringVar, TclError # ,Tk, Text
import tkinter.messagebox as tkMessageBox
from tkinter import messagebox
from idlelib.idle_test.mock_tk import Var, Mbox
from idlelib.idle_test.mock_tk import Text as mockText
import re
@ -19,13 +19,13 @@ def setUpModule():
# Replace s-e module tkinter imports other than non-gui TclError.
se.BooleanVar = Var
se.StringVar = Var
se.tkMessageBox = Mbox
se.messagebox = Mbox
def tearDownModule():
# Restore 'just in case', though other tests should also replace.
se.BooleanVar = BooleanVar
se.StringVar = StringVar
se.tkMessageBox = tkMessageBox
se.messagebox = messagebox
class Mock:

View file

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

View file

@ -5,8 +5,8 @@
import tempfile
import tokenize
import tkinter.filedialog as tkFileDialog
import tkinter.messagebox as tkMessageBox
from tkinter import filedialog
from tkinter import messagebox
from tkinter.simpledialog import askstring
import idlelib
@ -147,10 +147,10 @@ def loadfile(self, filename):
eol_convention = f.newlines
converted = True
except OSError as err:
tkMessageBox.showerror("I/O Error", str(err), parent=self.text)
messagebox.showerror("I/O Error", str(err), parent=self.text)
return False
except UnicodeDecodeError:
tkMessageBox.showerror("Decoding Error",
messagebox.showerror("Decoding Error",
"File %s\nFailed to Decode" % filename,
parent=self.text)
return False
@ -159,7 +159,7 @@ def loadfile(self, filename):
# If the file does not contain line separators, it is None.
# If the file contains mixed line separators, it is a tuple.
if eol_convention is not None:
tkMessageBox.showwarning("Mixed Newlines",
messagebox.showwarning("Mixed Newlines",
"Mixed newlines detected.\n"
"The file will be changed on save.",
parent=self.text)
@ -187,10 +187,10 @@ def maybesave(self):
return "yes"
message = "Do you want to save %s before closing?" % (
self.filename or "this untitled document")
confirm = tkMessageBox.askyesnocancel(
confirm = messagebox.askyesnocancel(
title="Save On Close",
message=message,
default=tkMessageBox.YES,
default=messagebox.YES,
parent=self.text)
if confirm:
reply = "yes"
@ -249,7 +249,7 @@ def writefile(self, filename):
os.fsync(f.fileno())
return True
except OSError as msg:
tkMessageBox.showerror("I/O Error", str(msg),
messagebox.showerror("I/O Error", str(msg),
parent=self.text)
return False
@ -286,7 +286,7 @@ def encode(self, chars):
failed = str(err)
except UnicodeEncodeError:
failed = "Invalid encoding '%s'" % enc
tkMessageBox.showerror(
messagebox.showerror(
"I/O Error",
"%s.\nSaving as UTF-8" % failed,
parent=self.text)
@ -295,10 +295,10 @@ def encode(self, chars):
return chars.encode('utf-8-sig')
def print_window(self, event):
confirm = tkMessageBox.askokcancel(
confirm = messagebox.askokcancel(
title="Print",
message="Print to Default Printer",
default=tkMessageBox.OK,
default=messagebox.OK,
parent=self.text)
if not confirm:
self.text.focus_set()
@ -336,10 +336,10 @@ def print_window(self, event):
status + output
if output:
output = "Printing command: %s\n" % repr(command) + output
tkMessageBox.showerror("Print status", output, parent=self.text)
messagebox.showerror("Print status", output, parent=self.text)
else: #no printing for this platform
message = "Printing is not enabled for this platform: %s" % platform
tkMessageBox.showinfo("Print status", message, parent=self.text)
messagebox.showinfo("Print status", message, parent=self.text)
if tempfilename:
os.unlink(tempfilename)
return "break"
@ -358,7 +358,7 @@ def print_window(self, event):
def askopenfile(self):
dir, base = self.defaultfilename("open")
if not self.opendialog:
self.opendialog = tkFileDialog.Open(parent=self.text,
self.opendialog = filedialog.Open(parent=self.text,
filetypes=self.filetypes)
filename = self.opendialog.show(initialdir=dir, initialfile=base)
return filename
@ -378,7 +378,7 @@ def defaultfilename(self, mode="open"):
def asksavefile(self):
dir, base = self.defaultfilename("save")
if not self.savedialog:
self.savedialog = tkFileDialog.SaveAs(
self.savedialog = filedialog.SaveAs(
parent=self.text,
filetypes=self.filetypes,
defaultextension=self.defaultextension)

View file

@ -21,13 +21,13 @@
except (ImportError, AttributeError, OSError):
pass
import tkinter.messagebox as tkMessageBox
from tkinter import messagebox
if TkVersion < 8.5:
root = Tk() # otherwise create root in main
root.withdraw()
from idlelib.run import fix_scaling
fix_scaling(root)
tkMessageBox.showerror("Idle Cannot Start",
messagebox.showerror("Idle Cannot Start",
"Idle requires tcl/tk 8.5+, not %s." % TkVersion,
parent=root)
raise SystemExit(1)
@ -261,7 +261,7 @@ def store_file_breaks(self):
except OSError as err:
if not getattr(self.root, "breakpoint_error_displayed", False):
self.root.breakpoint_error_displayed = True
tkMessageBox.showerror(title='IDLE Error',
messagebox.showerror(title='IDLE Error',
message='Unable to update breakpoint list:\n%s'
% str(err),
parent=self.text)
@ -771,7 +771,7 @@ def runcode(self, code):
exec(code, self.locals)
except SystemExit:
if not self.tkconsole.closing:
if tkMessageBox.askyesno(
if messagebox.askyesno(
"Exit?",
"Do you want to exit altogether?",
default="yes",
@ -805,7 +805,7 @@ def write(self, s):
return self.tkconsole.stderr.write(s)
def display_port_binding_error(self):
tkMessageBox.showerror(
messagebox.showerror(
"Port Binding Error",
"IDLE can't bind to a TCP/IP port, which is necessary to "
"communicate with its Python execution server. This might be "
@ -816,7 +816,7 @@ def display_port_binding_error(self):
parent=self.tkconsole.text)
def display_no_subprocess_error(self):
tkMessageBox.showerror(
messagebox.showerror(
"Subprocess Connection Error",
"IDLE's subprocess didn't make connection.\n"
"See the 'Startup failure' section of the IDLE doc, online at\n"
@ -824,7 +824,7 @@ def display_no_subprocess_error(self):
parent=self.tkconsole.text)
def display_executing_dialog(self):
tkMessageBox.showerror(
messagebox.showerror(
"Already executing",
"The Python Shell window is already executing a command; "
"please wait until it is finished.",
@ -945,7 +945,7 @@ def get_warning_stream(self):
def toggle_debugger(self, event=None):
if self.executing:
tkMessageBox.showerror("Don't debug now",
messagebox.showerror("Don't debug now",
"You can only toggle the debugger when idle",
parent=self.text)
self.set_debugger_indicator()
@ -1003,7 +1003,7 @@ def endexecuting(self):
def close(self):
"Extend EditorWindow.close()"
if self.executing:
response = tkMessageBox.askokcancel(
response = messagebox.askokcancel(
"Kill?",
"Your program is still running!\n Do you want to kill it?",
default="ok",
@ -1254,7 +1254,7 @@ def open_stack_viewer(self, event=None):
try:
sys.last_traceback
except:
tkMessageBox.showerror("No stack trace",
messagebox.showerror("No stack trace",
"There is no stack trace yet.\n"
"(sys.last_traceback is not defined)",
parent=self.text)

View file

@ -14,7 +14,7 @@
import time
import tokenize
import tkinter.messagebox as tkMessageBox
from tkinter import messagebox
from idlelib.config import idleConf
from idlelib import macosx
@ -195,15 +195,15 @@ def getfilename(self):
def ask_save_dialog(self):
msg = "Source Must Be Saved\n" + 5*' ' + "OK to Save?"
confirm = tkMessageBox.askokcancel(title="Save Before Run or Check",
confirm = messagebox.askokcancel(title="Save Before Run or Check",
message=msg,
default=tkMessageBox.OK,
default=messagebox.OK,
parent=self.editwin.text)
return confirm
def errorbox(self, title, message):
# XXX This should really be a function of EditorWindow...
tkMessageBox.showerror(title, message, parent=self.editwin.text)
messagebox.showerror(title, message, parent=self.editwin.text)
self.editwin.text.focus_set()
self.perf = time.perf_counter()

View file

@ -2,7 +2,7 @@
import re
from tkinter import StringVar, BooleanVar, TclError
import tkinter.messagebox as tkMessageBox
from tkinter import messagebox
def get(root):
'''Return the singleton SearchEngine instance for the process.
@ -96,7 +96,7 @@ def report_error(self, pat, msg, col=None):
msg = msg + "\nPattern: " + str(pat)
if col is not None:
msg = msg + "\nOffset: " + str(col)
tkMessageBox.showerror("Regular expression error",
messagebox.showerror("Regular expression error",
msg, master=self.root)
def search_text(self, text, prog=None, ok=0):

View file

@ -17,7 +17,7 @@
import re
import tkinter as tk
import tkinter.messagebox as tkMessageBox
from tkinter import messagebox
from idlelib.config import idleConf
from idlelib.textview import view_text
@ -147,7 +147,7 @@ def expand(self, event=None):
if self.is_dangerous is None:
self.set_is_dangerous()
if self.is_dangerous:
confirm = tkMessageBox.askokcancel(
confirm = messagebox.askokcancel(
title="Expand huge output?",
message="\n\n".join([
"The squeezed output is very long: %d lines, %d chars.",
@ -155,7 +155,7 @@ def expand(self, event=None):
"It is recommended to view or copy the output instead.",
"Really expand?"
]) % (self.numoflines, len(self.s)),
default=tkMessageBox.CANCEL,
default=messagebox.CANCEL,
parent=self.text)
if not confirm:
return "break"