python / cpython

The Python programming language
https://www.python.org
Other
62.76k stars 30.08k forks source link

tkinter documentation suggests "from tkinter import *", contradicting PEP8 #77011

Closed b44b4b52-e24a-4005-a270-f6f76c384034 closed 6 years ago

b44b4b52-e24a-4005-a270-f6f76c384034 commented 6 years ago
BPO 32830
Nosy @ned-deily, @serhiy-storchaka, @chris-rands

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields: ```python assignee = None closed_at = created_at = labels = ['invalid', 'docs'] title = 'tkinter documentation suggests "from tkinter import *", contradicting PEP8' updated_at = user = 'https://github.com/chris-rands' ``` bugs.python.org fields: ```python activity = actor = 'busfault' assignee = 'docs@python' closed = True closed_date = closer = 'ned.deily' components = ['Documentation'] creation = creator = 'ChrisRands' dependencies = [] files = [] hgrepos = [] issue_num = 32830 keywords = [] message_count = 7.0 messages = ['312045', '312047', '312048', '312049', '312051', '312054', '382278'] nosy_count = 5.0 nosy_names = ['ned.deily', 'docs@python', 'busfault', 'serhiy.storchaka', 'ChrisRands'] pr_nums = [] priority = 'normal' resolution = 'not a bug' stage = 'resolved' status = 'closed' superseder = None type = None url = 'https://bugs.python.org/issue32830' versions = [] ```

b44b4b52-e24a-4005-a270-f6f76c384034 commented 6 years ago

Issue arose from this SO post: https://stackoverflow.com/questions/48746351/documentation-is-contradicting-pep8

The tkinter documentation suggests:

from tkinter import *

https://docs.python.org/3/library/tkinter.html

But this obviously contradicts PEP-8: "Wildcard imports (from \<module> import *) should be avoided"

https://www.python.org/dev/peps/pep-0008/#imports

Is tkinter a valid exception or is this a documentation bug?

The commit of this line to the documentation is >10 years old (at least Python 2.4 I think): https://github.com/python/cpython/commit/116aa62bf54a39697e25f21d6cf6799f7faa1349#diff-05a258c160de90c51c1948689f788ef7R53

serhiy-storchaka commented 6 years ago

I think tkinter is a valid exception. It provides the enormous number of names (mostly constants like RIGHT or VERTICAL) which are convenient to use without prefix.

PEP-8 is a style guide for the code of the stdlib. Its suggestions are not mandatory for a user code.

b44b4b52-e24a-4005-a270-f6f76c384034 commented 6 years ago

Thanks Serhiy, you might be right (I am not a tkinter user myself).

I also forgot to say that in PEP-328 tkinter is mentioned in this context: https://www.python.org/dev/peps/pep-0328/#rationale-for-parentheses

ned-deily commented 6 years ago

PEP-8 also says: "In particular: do not break backwards compatibility just to comply with this PEP!" This is one of those cases. There is a ton of code out there that depends on importing tkinter this way for the reasons Serhiy cited. Thanks for the suggestion but this usage is not going to change.

b44b4b52-e24a-4005-a270-f6f76c384034 commented 6 years ago

Ok thanks both for the clarification!

serhiy-storchaka commented 6 years ago

I want to add that the star import is more convenient when you experiment with Tkinter in REPL. You don't know what names will be needed when import Tkinter.

The interpreter core has a special support of Tkinter. You don't need to run mainloop() for updating GUI in REPL. So this is a supported case.

798ee2a4-f444-4695-a99b-62559c8c40c9 commented 3 years ago

While I agree that it shouldn't be imposed on changing previous code, changing the documentation isn't changing the previous code it is encouraging future code. I think that the documentation should have a caveat. I'm seeing a lot of new code using tkinter with glob import which is obviously from the documentation as it suggests doing so. I think that the glob import practice should be overall discouraged. I think adding a disclaimer in the documentation at the reference to from tkinter import * would be sufficient. A reference to PEP-8 would be good. I'd imagine that most people look up docs and are not as familiar with PEP. Why can't something like that be added to the documentation?