Skip to content

[3.9] bpo-43013: Fix old tkinter module names in idlelib (GH-24326) #24327

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions Lib/idlelib/configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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):
Expand Down
16 changes: 8 additions & 8 deletions Lib/idlelib/editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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.",
Expand Down
6 changes: 3 additions & 3 deletions Lib/idlelib/filelist.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"idlelib.filelist"

import os
from tkinter import messagebox as tkMessageBox
from tkinter import messagebox


class FileList:
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
9 changes: 4 additions & 5 deletions Lib/idlelib/idle_test/mock_tk.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions Lib/idlelib/idle_test/test_configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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')
Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions Lib/idlelib/idle_test/test_replace.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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
Expand All @@ -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
Expand Down
6 changes: 3 additions & 3 deletions Lib/idlelib/idle_test/test_searchengine.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand Down
4 changes: 2 additions & 2 deletions Lib/idlelib/idle_test/test_squeezer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand Down
30 changes: 15 additions & 15 deletions Lib/idlelib/iomenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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)
Expand All @@ -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()
Expand Down Expand Up @@ -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"
Expand All @@ -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
Expand All @@ -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)
Expand Down
Loading