This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2015年07月30日 22:18 by terry.reedy, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| require85.diff | terry.reedy, 2016年06月03日 15:44 | review | ||
| require85-v2.diff | terry.reedy, 2016年06月04日 20:31 | review | ||
| require85-v3.diff | terry.reedy, 2016年06月06日 02:13 | review | ||
| Messages (31) | |||
|---|---|---|---|
| msg247701 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年07月30日 22:18 | |
PyShell currently has this code
try:
from tkinter import *
except ImportError:
print("** IDLE can't import Tkinter.\n"
"Your Python may not be configured for Tk. **", file=sys.__stderr__)
sys.exit(1)
import tkinter.messagebox as tkMessageBox
When Idle is started from an icon, there is no place for the error message to go, so it appears than nothing happens. But this is the best we can do without invoking system specific error message functions. (This, if possible, would be another issue.) The second import assumes that messagebox is available, which is should be without modification of the tkinter package since long ago. But I think we should guard against someone trying to start Idle on pre 8.5. The following seems to work nicely. This is a prerequisite for any ttk patches. Any comment before I apply?
try:
from tkinter import ttk
except:
root = Tk()
root.withdraw()
tkMessageBox.showerror("Fatal Idle Import Error",
"Idle cannot import required module tkinter.ttk.\n"
"Click OK to exit.",
parent=root)
sys.exit(1)
|
|||
| msg247702 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年07月30日 22:21 | |
I tested by renaming installed 3.5 ttk, editing 3.5 PyShell with 3.4, and clicking 3.5 icon. |
|||
| msg247703 - (view) | Author: Mark Roseman (markroseman) * | Date: 2015年07月30日 22:30 | |
Sounds good. Only suggestion, given it's user facing, is to have the error message point them towards a solution. Off the top of my head, maybe something like "IDLE requires Python be configured to use Tk 8.5 or newer (you have Tk x.x)" with a title of "IDLE Cannot be Started" |
|||
| msg247721 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2015年07月31日 01:17 | |
New changeset 8203fc75b3d2 by Terry Jan Reedy in branch '2.7': Issue 24759: Gracefull exit Idle if ttk import fails. https://hg.python.org/cpython/rev/8203fc75b3d2 New changeset 13a8782a775e by Terry Jan Reedy in branch '3.4': Issue 24759: Gracefull exit Idle if ttk import fails. https://hg.python.org/cpython/rev/13a8782a775e |
|||
| msg247722 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年07月31日 01:19 | |
Improved message. Thanks. Should be good enough for the extremely few times it should ever be triggered. |
|||
| msg247810 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年08月01日 14:23 | |
IMHO Tcl and Tk should be in title case (as Python or Django) or at least all in upper case (as APL or SDL). |
|||
| msg247811 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年08月01日 14:26 | |
I don't see any mentions of ttk in IDLE source code except added check. Is ttk really required for IDLE? |
|||
| msg247816 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年08月01日 18:17 | |
Re-opened for tweak. This patch, to exit gracefully if ttk is not available, is the first step before using ttk in Idle. Mark, a long-time tk/ttk expert and site/book author, has volunteered to help upgrade Idle with ttk. Please see "ttk in idle" on Idle-Sig list for general discussion and #24750 for the first substantive patches. The only reason I have not applied the ttk.Scrollbar patch, on that issue, is because Ned mentioned, on that issue, that the OS 8.5 python requires tcl/tk 8.4. I strongly feel that this should not stop the use of ttk, but I an first doing a few non-ttk patches, including Mark's patch for #24745, before continuing. |
|||
| msg247843 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年08月02日 00:51 | |
Re-reading PEP 434, I was mistaken to apply this patch to 2.7 and 3.4 without further discussion. The PEP says "The PEP would apply to minor ..., but not necessarily to possible major re-writes such as switching to themed widgets ... ." Nick, should I post something on python-ideas or pydev, or continue here (moved from #24750) about making the switch also in 2.7 and 3.4? I believe it would be best overall to at upgrade Idle 2.7, but I will not cry if we stop patching it now. Ditto for 3.4, which will soon get security fixes only anyway. I am ok with using ttk starting with 3.5. |
|||
| msg247845 - (view) | Author: Mark Roseman (markroseman) * | Date: 2015年08月02日 01:11 | |
Got it re: 2.7/3.4. So the only stumbling block left to 8.5/ttk in 3.5 would be the current Mac build that is ok with Tcl/Tk 8.4...? |
|||
| msg247854 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年08月02日 04:37 | |
Ttk widgets are partially compatible with Tk widgets, so in many cases it is possible to make partial upgrade without major rewriting. Some changes perhaps need major rewriting (using styles, changing layout), and I think this is what the PEP does not allow. However it is possible that all changes can be done without major rewriting, we don't know until try. |
|||
| msg247860 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年08月02日 09:46 | |
If 2.7 and 3.4 are left out of consideration, then, AFAIK, the only people necessarily affected are those with a PowerPC with OS 10.5 who upgrade to python3.5 and also want to run Idle. People with an Intel machine instead might be if there is no python3.5 that will run with the ActiveState 8.5 that Mark says works on Intel 10.5 machines. I wish I know how many people that is. I suspect a tiny fraction of Idle users and of people with such machines. But ...
The compatibility approach will work for Scrollbars, but I am dubious about other widgets. For instance, tk Buttons have at least 31 options. ttk Buttons have 9 of the same + style (and class_, which I do not thing we would use), leaving 22 tk-only options.
To write tk&ttk code *in one file*, I believe
...ttk.Button(parent, <options>, style='xyz')
would have to be written (compactly) as something like
b=...Button(parent, <common options>)
b.config(**({'style':'xyz'} if ttk else { <tk style options>}))
or (expansively, in 5 lines)
b=...Button(parent, <common options>)
if ttk:
b['style'] = 'xyz'
else:
b.config(<tk style options in '=' format>})
I consider this impractical. I am unwilling to write code that way, in part because it would have to be carefully tested both with and without ttk -- by hand. I cannot imagine anyone else doing so either. It also does not work for uses of ttk.Treeview, whose API is different from the multiple classes used in Path and Class (Module) browser). I believe the same is true for ttk.Notebook and the idlelib tab widget.
What I already planned to do instead is copy existing dialog code to new files, possibly refactored, with pep8 filenames and internal names style. I already planned to leave the existing files in place for now, though as zombies, in case of any external code imports. With a little more work, it should be possible to optionally use either old or new files. Most of the work would be done with alternate bindings to menu items and accelerator keys, such as Find in Files and Alt-F3.
It might be more acceptible to use ttk in 2.7 and 3.4 as an option rather than as a replacement. Though I would only commit a ttk version when confident that is works, leaving the option to switch back would add a safety factor. I changed the title and will revert the patch later.
|
|||
| msg247862 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年08月02日 10:27 | |
Note also that committed patch doesn't work at all. "from tkinter import ttk" doesn't raise an exception with Tcl/Tk 8.4. See my patch in issue24750 that does working check. I consider impractical complex code for supporting 8.4 and ttk too. But in simplest cases this can be done easy. |
|||
| msg247896 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年08月02日 21:00 | |
I realize now that tkinter.ttk is (normally) present and will define Python classes even if the tk widgets needed for them to work are not present. More comments on the added module on #24750 |
|||
| msg247963 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2015年08月03日 22:45 | |
New changeset 0511b1165bb6 by Terry Jan Reedy in branch '2.7': Issue #24759: Revert 8203fc75b3d2. https://hg.python.org/cpython/rev/0511b1165bb6 New changeset 06852194f541 by Terry Jan Reedy in branch '3.4': Issue #24759: Revert 13a8782a775e. https://hg.python.org/cpython/rev/06852194f541 New changeset 863e3cdbbabe by Terry Jan Reedy in branch '3.5': Issue #24759: Merge with 3.4 https://hg.python.org/cpython/rev/863e3cdbbabe New changeset 3bcb184b62f8 by Terry Jan Reedy in branch 'default': Issue #24759: Merge with 3.5 https://hg.python.org/cpython/rev/3bcb184b62f8 |
|||
| msg247993 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2015年08月04日 19:43 | |
A second specific reason to make ttk optional is either they or the accompanying re-writing may (and probably will) break some extension that goes beyond the narrowly defined extension interface. For the present, a user using such an extension would be able to continue to do so, by turning use_ttk off. (I plan to add some DeprecationWarnings, either at startup or old tk module import, when use_ttk is possible but turned off.) The normal bugfix-only policy, and the Idle exemption, starts with each x.y.0b1 release. The point of excluding 'major re-writes such as switching to themed widgets' was to exclude changes in bugfix releases that prevent idle from running in the 'current' environment. In private email, Nick agreed with me that with ttk and any possible disablement made optional, it can be added to all current releases. He also suggested being on by default when possible. I decided not to put anything into 3.5.0. I intend to start pushing ttk patches perhaps next week after the release branch is split off and the main 3.5 branch is 3.5.1. |
|||
| msg248031 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2015年08月05日 12:28 | |
IDLE's in an "interesting" place right now - it isn't showing people Tcl/Tk in its best light, so folks are likely to assume all Tcl/Tk apps necessarily look that way, and it's also using GUI idioms like separate shell and editor windows that don't reflect the conventions of modern IDEs. For 3.5.1+, I think there's no question that we want to show IDLE in the best possible light, and we want to try to do that by default. That means modernising it to use the best cross-platform features that Tcl/Tk has to offer (including ttk). However, Ned pointed out that the last PPC-supporting Mac OS X (10.5) has a Tcl/Tk version older than 8.5, and there's the general compatibility risk for breaking extensions with large refactorings, so retaining a "non-ttk mode" will be a valuable approach to the modernisation effort. |
|||
| msg266743 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2016年05月31日 07:31 | |
In msg265349, Ned stated that running IDLE with 8.4 should no longer be a requirement in 3.6. Hence the revised title and restriction to 3.6. Serhiy, I read the code in your #24750 patch. Should it not be enough to first check tkinter.Tkversion >= 8.5 before trying to import ttk. And is testing ttk then needed? Is it possible for ttk to not work in 8.5/6)? Tkversion (or a refinement thereof) is already checked in colorizer, config, editor, macosx, and pyshell. With one check on startup, existing check can be eliminated, along with code only for older versions. |
|||
| msg266803 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2016年06月01日 07:36 | |
My patch in issue24750 makes sense only if we want support Tcl/Tk 8.4. I think that if require Tcl/Tk 8.5+, we can use Ttk directly and unconditionally. I don't think that it can be not working. |
|||
| msg267077 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2016年06月03日 07:59 | |
Given what Serhiy said, the core of this patch is the original patch with a test of TkVersion instead of importing ttk. Code that only ran for 8.4- is removed. Some minimal new tests are added, and I may add some more. None of the changes should depend on OS. I want to apply this in a few days as it is a prerequisite for ttk patches. |
|||
| msg267080 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2016年06月03日 08:12 | |
Do you forgot to attach a patch? |
|||
| msg267108 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2016年06月03日 15:44 | |
Trying again. And yes, I would like a review. I don't think there is anything system specific, but some deletions required a minor rewrite. |
|||
| msg267145 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2016年06月03日 19:23 | |
Did you try to run tests with Tk 8.4? |
|||
| msg267154 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2016年06月03日 20:00 | |
No, 3.4 is security fixes only and this is a 3.6 only issue. |
|||
| msg267156 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2016年06月03日 20:15 | |
I meant Tk 8.4, not Python 3.4. Tests should be either passed or skipped, no errors raised. |
|||
| msg267180 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2016年06月03日 22:33 | |
I saw the review comment about adding lines.
I do not have 8.4 either, but I get the point: the startup version check does not not guard the unittests. After test.text_idle imports unittest and tkinter (as tk) (line 6), I will add
if tk.TkVersion < 8.5:
raise unittest.SkipTest("IDLE requires tk 8.5 or later.")
I will add a 'private API' and version-required notice to idlelib.idle_test.__init__. I will add version required to the notice already in idlelib.__init__.
For similar reasons, the proposed interface module (#27162) would also need an explicit check. (Note added there.)
|
|||
| msg267311 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2016年06月04日 20:16 | |
New changeset e6560f018845 by Terry Jan Reedy in branch '2.7': Issue #24759: Add 'private' notice for idlelib.idle_test. https://hg.python.org/cpython/rev/e6560f018845 New changeset d75a25b3abe1 by Terry Jan Reedy in branch '3.5': Issue #24759: Add 'private' notice for idlelib.idle_test. https://hg.python.org/cpython/rev/d75a25b3abe1 |
|||
| msg267313 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2016年06月04日 20:31 | |
I believe require85-v2.diff adds everything specified in my last post. |
|||
| msg267502 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2016年06月06日 02:13 | |
Fixed whitespace and added comment. |
|||
| msg268073 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2016年06月10日 01:04 | |
New changeset 81927f86fa3a by Terry Jan Reedy in branch 'default': Issue #24759: Add test for IDLE syntax colorizoer. https://hg.python.org/cpython/rev/81927f86fa3a |
|||
| msg268074 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2016年06月10日 01:09 | |
New changeset 76f831e4b806 by Terry Jan Reedy in branch 'default': Issue #24759: IDLE requires tk 8.5 and availability ttk widgets. https://hg.python.org/cpython/rev/76f831e4b806 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:19 | admin | set | github: 68947 |
| 2019年03月23日 04:15:36 | terry.reedy | set | components: + IDLE |
| 2016年06月10日 22:41:41 | terry.reedy | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2016年06月10日 01:09:33 | python-dev | set | messages: + msg268074 |
| 2016年06月10日 01:04:26 | python-dev | set | messages: + msg268073 |
| 2016年06月06日 02:13:14 | terry.reedy | set | files:
+ require85-v3.diff messages: + msg267502 |
| 2016年06月04日 20:31:04 | terry.reedy | set | files:
+ require85-v2.diff messages: + msg267313 |
| 2016年06月04日 20:16:32 | python-dev | set | messages: + msg267311 |
| 2016年06月03日 22:33:16 | terry.reedy | set | messages: + msg267180 |
| 2016年06月03日 20:15:08 | serhiy.storchaka | set | messages: + msg267156 |
| 2016年06月03日 20:00:04 | terry.reedy | set | messages: + msg267154 |
| 2016年06月03日 19:23:53 | serhiy.storchaka | set | messages: + msg267145 |
| 2016年06月03日 15:44:19 | terry.reedy | set | files:
+ require85.diff keywords: + patch messages: + msg267108 |
| 2016年06月03日 08:12:20 | serhiy.storchaka | set | messages: + msg267080 |
| 2016年06月03日 07:59:36 | terry.reedy | set | messages:
+ msg267077 stage: needs patch -> patch review |
| 2016年06月01日 07:36:23 | serhiy.storchaka | set | messages: + msg266803 |
| 2016年05月31日 07:31:36 | terry.reedy | set | title: Idle: add ttk widgets as an option -> Idle: require tk 8.5 and ttk widgets, and drop unneeded code. messages: + msg266743 versions: - Python 2.7, Python 3.4, Python 3.5 |
| 2016年05月31日 07:03:53 | terry.reedy | link | issue27163 dependencies |
| 2015年08月05日 17:21:44 | Al.Sweigart | set | nosy:
+ Al.Sweigart |
| 2015年08月05日 12:29:03 | ncoghlan | set | nosy:
+ ned.deily messages: + msg248031 |
| 2015年08月04日 19:43:36 | terry.reedy | set | messages: + msg247993 |
| 2015年08月03日 22:45:36 | python-dev | set | messages: + msg247963 |
| 2015年08月02日 21:00:57 | terry.reedy | set | messages: + msg247896 |
| 2015年08月02日 10:27:10 | serhiy.storchaka | set | messages: + msg247862 |
| 2015年08月02日 09:46:03 | terry.reedy | set | title: Idle: require ttk (and tcl/tk 8.5) -> Idle: add ttk widgets as an option messages: + msg247860 stage: needs patch |
| 2015年08月02日 04:37:48 | serhiy.storchaka | set | messages: + msg247854 |
| 2015年08月02日 01:11:21 | markroseman | set | messages: + msg247845 |
| 2015年08月02日 00:51:33 | terry.reedy | set | nosy:
+ ncoghlan title: Idle: require 8.5 / ttk -> Idle: require ttk (and tcl/tk 8.5) messages: + msg247843 resolution: fixed -> (no value) stage: resolved -> (no value) |
| 2015年08月01日 18:17:59 | terry.reedy | set | status: closed -> open messages: + msg247816 |
| 2015年08月01日 14:26:31 | serhiy.storchaka | set | messages: + msg247811 |
| 2015年08月01日 14:23:08 | serhiy.storchaka | set | nosy:
+ serhiy.storchaka messages: + msg247810 |
| 2015年07月31日 01:19:40 | terry.reedy | set | status: open -> closed resolution: fixed messages: + msg247722 stage: commit review -> resolved |
| 2015年07月31日 01:17:53 | python-dev | set | nosy:
+ python-dev messages: + msg247721 |
| 2015年07月30日 22:51:52 | terry.reedy | link | issue24750 dependencies |
| 2015年07月30日 22:30:24 | markroseman | set | messages: + msg247703 |
| 2015年07月30日 22:21:49 | terry.reedy | set | messages:
+ msg247702 stage: needs patch -> commit review |
| 2015年07月30日 22:18:35 | terry.reedy | create | |