Seite 1 von 1

Can't find a usable init.tcl

Verfasst: Freitag 29. Juni 2012, 09:58
von Thomas.braun
Hi,

erstmal kurze Vorstellung, ich entwickle schon länger (> 20a) Software in verschiedenen Sprachen und möchte mich jetzt auch mal mit Python beschäftigen da ich eine Webanwendung umstellen sollte.

Diese wurde in einem Nischenprodukt namens Xbase++ entwickelt, das leider keine Unicode-Unterstützung bietet und soweit ich das abschätzen kann auch keine bekommen wird.

Daher wurstel ich mich momentan durch verschiedene Sprachen (u.a PHP und Python) und Web Frameworks durch um das für mich richtige zu finden.

Python / TurboGears ist der aktuelle Kandidat :mrgreen:

Da ich in der alten Webanwendung stark auf List&Label von Combit setze um PDF-Rechnungen zu erzeugen wollte ich jetzt das Python-Beispiel testen das bei List&Label dabei ist.

Leider knallt es mit der Fehlermeldung im Betreff... detailliert sieht das so aus:
D:\LLPython>python mainwnd.py
Traceback (most recent call last):
File "mainwnd.py", line 97, in <module>
app = Application()
File "mainwnd.py", line 18, in __init__
Frame.__init__(self, master)
File "D:\Python27\Lib\lib-tk\Tkinter.py", line 2453, in __init__
Widget.__init__(self, master, 'frame', cnf, {}, extra)
File "D:\Python27\Lib\lib-tk\Tkinter.py", line 1965, in __init__
BaseWidget._setup(self, master, cnf)
File "D:\Python27\Lib\lib-tk\Tkinter.py", line 1940, in _setup
_default_root = Tk()
File "D:\Python27\Lib\lib-tk\Tkinter.py", line 1685, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, want objects, useTk, sync, use)
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
D:/Python27/lib/tcl8.5 D:/Python27/env/lib/tcl8.5 D:/Python27/lib/tcl8.5 D:/
Python27/env/library D:/Python27/library D:/Python27/tcl8.5.2/library D:/tcl8.5.
2/library

This probably means that Tcl wasn't installed properly.
mainwnd.py sieht so aus:

Code: Alles auswählen

from Tkinter import *

from ctypes import *
import sqlite3

LL = windll.cmll17

# connect to database
SQLCon = sqlite3.connect("simple.db3")
SQLCur = SQLCon.cursor()
FileName = c_char_p("sample.lbl")

class Application(Frame):
	def __init__(self, master=None):
		Frame.__init__(self, master)
		self.grid()
		self.createWidgets()
	
	def createWidgets(self):
		self.appLabelDE = Label ( self, text="D: Dieses Beispiel demonstriert das Designen und Drucken von Etiketten",   justify=LEFT )
		self.appLabelDE.grid()
		self.appLabelUS = Label ( self, text="US: This example demonstrates how to design and print labels", justify=LEFT )
		self.appLabelUS.grid()
		self.designButton = Button ( self, text="Design...", command=self.dodesign, width=50 )
		self.designButton.grid()
		self.printButton = Button ( self, text="Preview", command=self.doprint, width=50 )
		self.printButton.grid()
[...]

app = Application()
app.master.title("List & Label sample application")
app.mainloop() 		
Was für mich hierbeit verwirrend ist:

- init.tcl ist vorhanden, und zwar unter: D:\Python27\tcl\tcl8.5
- Keiner der Pfade aus der Fehlermeldung oben ist vorhanden
- IDLE sowie auch Pythonwin funktionieren (also sollte Tkinter doch funktionsfähig sein?)

Die %PATH%-Umgebungsvariable enthält lediglich D:\Python27\env\scripts;
%pythonpath% ist nicht definiert

Plattform: Win7 64 bit
Python version: Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32

Ich bin überzeugt das ist nur 'ne Kleinigkeit - aber meine suche über Google hat mich nirgendwohin geführt... nja... sie hat mich hierhergeführt :D

grüße
thomas

Re: Can't find a usable init.tcl

Verfasst: Freitag 29. Juni 2012, 10:01
von deets
Nur kurz zum Thema TurboGears: ich bin dort Committer gewesen, und muss leider sagen, dass das Projekt nicht mehr wirklich zu empfehlen ist. Nicht aus technischen Gruenden. Aber die Community schwindet stetig, und ich denke, es ist ein Tod auf Raten. Django oder Pyramid sind bessere Kandidaten, wenn du full-fledged Frameworks moechtest.

Re: Can't find a usable init.tcl

Verfasst: Freitag 29. Juni 2012, 10:40
von Thomas.braun
TurboGears war bisher das einzige der Frameworks das ich fast ungestört von irgendwelchen obskuren Problemen zum laufen gebracht habe.

Django unterstützt bisher Python 3.x nicht - da ich noch kompletter Python-Neuling bin kann ich hierbei die Konsequenzen aber nicht wirklich abschätzen.

Allgemein gesehen ist die Entscheidung ohnehin sehr schwer - Python als Sprache gefällt mir sehr gut, wesentlich besser als PHP, nicht zuletzt auch wegen dem hier http://me.veekun.com/blog/2012/04/09/ph ... ad-design/ - mag sein das viele der Argumente in der praktischen Anwendung nicht ins Gewicht fallen, aber PHP ist teilweise so grausiger Designmurks das einem Übel wird.

Ich glaube mit Python bin ich da besser aufgehoben.

Re: Can't find a usable init.tcl

Verfasst: Freitag 29. Juni 2012, 10:58
von BlackJack
@Thomas.braun: Um es mal überspitzt zu formulieren: Fehlende Python 3 Unterstützung ist eher ein Problem von Python 3 statt von Django. ;-)

Ich würde sagen Django ist *das* Webrahmenwerk wenn man es möglichst aus einem Guss und eine grosse Nutzergemeinschaft haben möchte.

Bei der Fehlermeldung bin ich auch ratlos, insbesondere wenn andere Python-Programme mit Tk-Oberfläche funktionieren. :-(

Re: Can't find a usable init.tcl

Verfasst: Freitag 29. Juni 2012, 13:00
von Thomas.braun
BlackJack hat geschrieben:Bei der Fehlermeldung bin ich auch ratlos, insbesondere wenn andere Python-Programme mit Tk-Oberfläche funktionieren. :-(
Es wäre schonmal hilfreich zu wissen woher diese ominöse Liste von Suchpfaden kommt (ich glaube ich laß mal procmon mitlaufen) :
Can't find a usable init.tcl in the following directories:
D:/Python27/lib/tcl8.5 D:/Python27/env/lib/tcl8.5 D:/Python27/lib/tcl8.5 D:/
Python27/env/library D:/Python27/library D:/Python27/tcl8.5.2/library D:/tcl8.5.
2/library

Re: Can't find a usable init.tcl

Verfasst: Samstag 26. April 2014, 18:45
von petersonx
Man müsste meinen, das Problem sei im Jahr 2014 mit Python 3.4 behoben. Leider nein, es tritt immer noch auf: Zwar nicht unter native Windows, jedoch unter der "mingw32/git bash", und zwar dann, wenn ich mit "virtualenv" (1.11.4) eine virtuelle Umgebung in mingw32 erstelle.

Auch dann erhalte ich bei Tcl/Tk-Programmen die Fehlermeldung "_tkinter.TclError: Can't find a usable init.tcl in the following directories" etc...

Die Lösung ist, das "Scripts/activate" script zu erweitern.

Man fügt die Zeilen ein (in etwa:)
TK_LIBRARY="/c/Python34/tcl/tk8.6"
TCL_LIBRARY="/c/Python34/tcl/tcl8.6"
export TK_LIBRARY
export TCL_LIBRARY
und zwar am besten direkt nach
PATH="$VIRTUAL_ENV/Scripts:$PATH"
export PATH
Vlt. hilft die Info dem einem oder anderen.
Damit kann man dann fröhlich Tcl/Tk nutzen.

Re: Can't find a usable init.tcl

Verfasst: Dienstag 25. August 2015, 15:58
von jens
Bekanntes Problem, wenn virtualenv benutzt wird, siehe neueren Thread: http://www.python-forum.de/viewtopic.ph ... 76#p281876