summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/tkinter/__init__.py6
-rw-r--r--Lib/tkinter/colorchooser.py2
-rw-r--r--Lib/tkinter/commondialog.py8
-rw-r--r--Lib/tkinter/dialog.py5
-rw-r--r--Lib/tkinter/dnd.py3
-rw-r--r--Lib/tkinter/filedialog.py14
-rw-r--r--Lib/tkinter/font.py5
-rw-r--r--Lib/tkinter/messagebox.py4
-rw-r--r--Lib/tkinter/scrolledtext.py4
-rw-r--r--Lib/tkinter/test/test_tkinter/test_misc.py14
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Library/2019-07-19-16-06-48.bpo-29446.iXGuoi.rst1
12 files changed, 52 insertions, 15 deletions
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index 57d5b25..9626a27 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -32,13 +32,13 @@ tk.mainloop()
import enum
import sys
+import types
import _tkinter # If this fails your Python may not be configured for Tk
TclError = _tkinter.TclError
from tkinter.constants import *
import re
-
wantobjects = 1
TkVersion = float(_tkinter.TK_VERSION)
@@ -4569,5 +4569,9 @@ def _test():
root.mainloop()
+__all__ = [name for name, obj in globals().items()
+ if not name.startswith('_') and not isinstance(obj, types.ModuleType)
+ and name not in {'wantobjects'}]
+
if __name__ == '__main__':
_test()
diff --git a/Lib/tkinter/colorchooser.py b/Lib/tkinter/colorchooser.py
index 9dc9671..3cfc06f 100644
--- a/Lib/tkinter/colorchooser.py
+++ b/Lib/tkinter/colorchooser.py
@@ -21,6 +21,8 @@
from tkinter.commondialog import Dialog
+__all__ = ["Chooser", "askcolor"]
+
#
# color chooser class
diff --git a/Lib/tkinter/commondialog.py b/Lib/tkinter/commondialog.py
index c4ec010..e56b5ba 100644
--- a/Lib/tkinter/commondialog.py
+++ b/Lib/tkinter/commondialog.py
@@ -8,15 +8,17 @@
# written by Fredrik Lundh, May 1997
#
-from tkinter import *
+__all__ = ["Dialog"]
+
+from tkinter import Frame
class Dialog:
- command = None
+ command = None
def __init__(self, master=None, **options):
- self.master = master
+ self.master = master
self.options = options
if not master and options.get('parent'):
self.master = options['parent']
diff --git a/Lib/tkinter/dialog.py b/Lib/tkinter/dialog.py
index cb463f7..8ae2140 100644
--- a/Lib/tkinter/dialog.py
+++ b/Lib/tkinter/dialog.py
@@ -1,7 +1,8 @@
# dialog.py -- Tkinter interface to the tk_dialog script.
-from tkinter import *
-from tkinter import _cnfmerge
+from tkinter import _cnfmerge, Widget, TclError, Button, Pack
+
+__all__ = ["Dialog"]
DIALOG_ICON = 'questhead'
diff --git a/Lib/tkinter/dnd.py b/Lib/tkinter/dnd.py
index 4de2331..3120ff3 100644
--- a/Lib/tkinter/dnd.py
+++ b/Lib/tkinter/dnd.py
@@ -99,9 +99,10 @@ active; it will never call dnd_commit().
"""
-
import tkinter
+__all__ = ["dnd_start", "DndHandler"]
+
# The factory function
diff --git a/Lib/tkinter/filedialog.py b/Lib/tkinter/filedialog.py
index d9d3436..dbb97dd 100644
--- a/Lib/tkinter/filedialog.py
+++ b/Lib/tkinter/filedialog.py
@@ -11,14 +11,20 @@ to the native file dialogues available in Tk 4.2 and newer, and the
directory dialogue available in Tk 8.3 and newer.
These interfaces were written by Fredrik Lundh, May 1997.
"""
+__all__ = ["FileDialog", "LoadFileDialog", "SaveFileDialog",
+ "Open", "SaveAs", "Directory",
+ "askopenfilename", "asksaveasfilename", "askopenfilenames",
+ "askopenfile", "askopenfiles", "asksaveasfile", "askdirectory"]
-from tkinter import *
+import fnmatch
+import os
+from tkinter import (
+ Frame, LEFT, YES, BOTTOM, Entry, TOP, Button, Tk, X,
+ Toplevel, RIGHT, Y, END, Listbox, BOTH, Scrollbar,
+)
from tkinter.dialog import Dialog
from tkinter import commondialog
-import os
-import fnmatch
-
dialogstates = {}
diff --git a/Lib/tkinter/font.py b/Lib/tkinter/font.py
index 1364257..eeff454 100644
--- a/Lib/tkinter/font.py
+++ b/Lib/tkinter/font.py
@@ -3,11 +3,12 @@
# written by Fredrik Lundh, February 1998
#
-__version__ = "0.9"
-
import itertools
import tkinter
+__version__ = "0.9"
+__all__ = ["NORMAL", "ROMAN", "BOLD", "ITALIC",
+ "nametofont", "Font", "families", "names"]
# weight/slant
NORMAL = "normal"
diff --git a/Lib/tkinter/messagebox.py b/Lib/tkinter/messagebox.py
index 4a711fa..5f0343b 100644
--- a/Lib/tkinter/messagebox.py
+++ b/Lib/tkinter/messagebox.py
@@ -24,6 +24,10 @@
from tkinter.commondialog import Dialog
+__all__ = ["showinfo", "showwarning", "showerror",
+ "askquestion", "askokcancel", "askyesno",
+ "askyesnocancel", "askretrycancel"]
+
#
# constants
diff --git a/Lib/tkinter/scrolledtext.py b/Lib/tkinter/scrolledtext.py
index 749a06a6..4f9a881 100644
--- a/Lib/tkinter/scrolledtext.py
+++ b/Lib/tkinter/scrolledtext.py
@@ -11,11 +11,11 @@ Most methods calls are inherited from the Text widget; Pack, Grid and
Place methods are redirected to the Frame widget however.
"""
-__all__ = ['ScrolledText']
-
from tkinter import Frame, Text, Scrollbar, Pack, Grid, Place
from tkinter.constants import RIGHT, LEFT, Y, BOTH
+__all__ = ['ScrolledText']
+
class ScrolledText(Text):
def __init__(self, master=None, **kw):
diff --git a/Lib/tkinter/test/test_tkinter/test_misc.py b/Lib/tkinter/test/test_tkinter/test_misc.py
index 1d1a3c2..9d5a93e 100644
--- a/Lib/tkinter/test/test_tkinter/test_misc.py
+++ b/Lib/tkinter/test/test_tkinter/test_misc.py
@@ -7,6 +7,20 @@ support.requires('gui')
class MiscTest(AbstractTkTest, unittest.TestCase):
+ def test_all(self):
+ self.assertIn("Widget", tkinter.__all__)
+ # Check that variables from tkinter.constants are also in tkinter.__all__
+ self.assertIn("CASCADE", tkinter.__all__)
+ self.assertIsNotNone(tkinter.CASCADE)
+ # Check that sys, re, and constants are not in tkinter.__all__
+ self.assertNotIn("re", tkinter.__all__)
+ self.assertNotIn("sys", tkinter.__all__)
+ self.assertNotIn("constants", tkinter.__all__)
+ # Check that an underscored functions is not in tkinter.__all__
+ self.assertNotIn("_tkerror", tkinter.__all__)
+ # Check that wantobjects is not in tkinter.__all__
+ self.assertNotIn("wantobjects", tkinter.__all__)
+
def test_repr(self):
t = tkinter.Toplevel(self.root, name='top')
f = tkinter.Frame(t, name='child')
diff --git a/Misc/ACKS b/Misc/ACKS
index b062855..e02e8e1 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -649,6 +649,7 @@ Zac Hatfield-Dodds
Shane Hathaway
Michael Haubenwallner
Janko Hauser
+Flavian Hautbois
Rycharde Hawkes
Ben Hayden
Jochen Hayek
diff --git a/Misc/NEWS.d/next/Library/2019-07-19-16-06-48.bpo-29446.iXGuoi.rst b/Misc/NEWS.d/next/Library/2019-07-19-16-06-48.bpo-29446.iXGuoi.rst
new file mode 100644
index 0000000..9afda7e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-07-19-16-06-48.bpo-29446.iXGuoi.rst
@@ -0,0 +1 @@
+Make `from tkinter import *` import only the expected objects. \ No newline at end of file