Can't find a usable init.tcl

Fragen zu Tkinter.
Antworten
Thomas.braun
User
Beiträge: 3
Registriert: Freitag 29. Juni 2012, 09:13

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
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.
Thomas.braun
User
Beiträge: 3
Registriert: Freitag 29. Juni 2012, 09:13

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.
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. :-(
Thomas.braun
User
Beiträge: 3
Registriert: Freitag 29. Juni 2012, 09:13

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
petersonx
User
Beiträge: 3
Registriert: Sonntag 27. Januar 2013, 23:23
Wohnort: Ulm, Germany
Kontaktdaten:

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Bekanntes Problem, wenn virtualenv benutzt wird, siehe neueren Thread: http://www.python-forum.de/viewtopic.ph ... 76#p281876

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten