- 
                Notifications
    
You must be signed in to change notification settings  - Fork 68
 
Closed
Description
PS v3.0.21.0 x64
bug.py:
import tkinter
tkinter.Tk()output:
Traceback (most recent call last):
  File "C:\Programs\Notepad++\plugins\Config\PythonScript\scripts\Tests\bug.py", line 8, in <module>
    tkinter.Tk()
  File "C:\Programs\Notepad++\plugins\PythonScript\lib\tkinter\__init__.py", line 2346, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_tkinter.TclError: Can't find a usable init.tcl in the following directories: 
    C:/Programs/Notepad++/plugins/PythonScript/lib/tcl8.6 C:/Programs/lib/tcl8.6 C:/lib/tcl8.6 C:/Programs/library C:/library C:/tcl8.6.15/library C:/tcl8.6.15/library
C:/Programs/Notepad++/plugins/PythonScript/lib/tcl8.6/init.tcl: version conflict for package "Tcl": have 8.6.15, need exactly 8.6.13
version conflict for package "Tcl": have 8.6.15, need exactly 8.6.13
    while executing
"package require -exact Tcl 8.6.13"
    (file "C:/Programs/Notepad++/plugins/PythonScript/lib/tcl8.6/init.tcl" line 19)
    invoked from within
"source C:/Programs/Notepad++/plugins/PythonScript/lib/tcl8.6/init.tcl"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 [list source $tclfile]"
This probably means that Tcl wasn't installed properly.
| package require -exact Tcl 8.6.13 | 
PythonScript/PythonLib/tcl/tk8.6/tk.tcl
Line 14 in fce7c26
| package require -exact Tk 8.6.13 | 
Changing both require version strings to 8.6.15 avoids error.
Inside _tkinter binary is a string:
D:\a\1\s\externals\tcltk-8.6.15.2\amd64\lib\tcl8.6
Same string in PS v3.0.20.0 _tkinter binary.
PS v3.0.19.0 _tkinter binary has a different string:
D:\a\1\s\externals\tcltk-8.6.13.0\amd64\lib\tcl8.6
Appears that PS v3.0.19.0 is the last v3 version which matches the Tk/Tcl requirement of exactly 8.6.13 .
Downloaded tk8.6.15 source from SourceForge and compared tk.tcl with v3.0.21.0
@@ -11,7 +11,7 @@
 # this file, and for a DISCLAIMER OF ALL WARRANTIES.
 
 # Verify that we have Tk binary and script components from the same release
-package require -exact Tk  8.6.13
+package require -exact Tk  8.6.15
 
 # Create a ::tk namespace
 namespace eval ::tk {
@@ -178,16 +178,21 @@
 
     catch {focus $oldFocus}
     grab release $grab
-    if {$destroy eq "withdraw"} {
-	wm withdraw $grab
-    } else {
-	destroy $grab
+    if {[winfo exists $grab]} {
+	if {$destroy eq "withdraw"} {
+	    wm withdraw $grab
+	} else {
+	    destroy $grab
+	}
     }
     if {[winfo exists $oldGrab] && [winfo ismapped $oldGrab]} {
+	# The "grab" command will fail if another application
+	# already holds the grab on a window with the same name.
+	# So catch it. See [7447ed20ec] for an example.
 	if {$oldStatus eq "global"} {
-	    grab -global $oldGrab
+	    catch {grab -global $oldGrab}
 	} else {
-	    grab $oldGrab
+	    catch {grab $oldGrab}
 	}
     }
 }Metadata
Metadata
Assignees
Labels
No labels