2015-03-28 40 views
9

Python'da temel GUI'yi öğreniyorum ve örnek bir dosya örneğinden, dosya gezgini üzerinden Stack Overflow numaralı dosyadan okumak için rastladım. Ben IDLE içinde çalıştırmak için çalışıyorum Python Tkinter atma Tcl hatası

from Tkinter import Tk 
from tkFileDialog import askopenfilename 
Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing 
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file 
print(filename) 

Bu özel komut

iyi çalışıyor, ama pencereler

Python Version 7. komut isteminden çalışıyorum eğer aynı çalışmıyor: 2.7. İşte aldığım çıkış hatası.

>>> from Tkinter import Tk 
>>> from tkFileDialog import askopenfilename 
>>> Tk().withdraw() 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1685, 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:/Python27/lib/tcl8.5 D:/PyProj/lib/tcl8.5 D:/lib/tcl8.5 D:/PyProj/library D:/library D:/tcl8.5.2/library D:/tcl8.5.2/library 

This probably means that Tcl wasn't installed properly 

Burada eksik olduğum her hangi bir işaretçi çok yardımcı olabilir. Windows üzerinde VIRTUALENV kullandığınız durumda

+0

Boşta kullandığınız python sürümünün komut satırında kullanılan sürümle aynı olduğundan emin misiniz? –

+0

@BryanOakley evet Aynı sürümü kullanıyorum. İşte aynı IDLE: Python 2.7 (r27: 82525, 4 Temmuz 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] win32 üzerinde Python CmdLine: Python 2.7 (r27 : 82525, 4 Tem 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] win32 üzerinde – charan

+0

Web'de aşağıdakileri yaparak hızlı bir arama yaparsanız: 'Kullanılabilir init.tcl bulunamıyor Aşağıdaki dizinler, bir şey bulacaksınız;) – nbro

cevap

10

Burada bir çözüm buldu:

https://github.com/pypa/virtualenv/issues/93 Ben C "tcl" klasörünü kopyaladığınız: \ Python27 \ (yeni VIRTUALENV, Tkinter.Tk köküne üzerinden) bir istisna atmadan yeni bir pencere gösterir.

Ben Windows 7 üzerinde Python 2.7 çalıştırıyorum

0

BOŞTA muhtemelen TCL için gerekli yolu ayarlıyor. IDLE tarafından hangi yolun kullanıldığını bulmak için, IDLE'den ve IDLE'den sys.path çıktısını karşılaştırın. Sonra init.tcl'nin konumunu bir ortam değişkeni kullanarak veya programlı olarak ekleyebilirsiniz. Xenomorph önerisine bakınız.

5

Activestate Python ve TCL'yi yükledikten sonra benzer bir sorunla karşılaşın. Takip eden sayfa benim için sorunu çözdü: ActiveState Python install problem. Düzeltme, C:\Python27\tcl'un içeriğini C:\Python27\Lib içine kopyalamaktı.

Bir başka potansiyel çözüm Tcl kütüphanesi klasöre işaret environment variable$TCL_LIBRARY ayarlamak için olan (aynı konuda farklı ActiveState thread kullanıcı i-shenl tarafından verilen) ("C:/Python27/Tcl", söz konusu) . Bu sistemi veya hesap genişliğini (System Properties aracılığıyla) ayarlarsanız, bir TCL Kitaplığı (varsa) yüklü olan diğer programları etkileyecektir. Powershell'i kullanıyorsanız, bu değişkeni, kabuktan çalıştırılan programlardaki etkilerini sınırlamak için profile'unuzda ayarlayabilirsiniz.

+0

Bu klasörün içeriğini kopyalama benim için çalıştı. Tcl alt klasöründeki tüm dosyalar/klasörler tk veya tcl ile başladı ve hedef lib alt klasöründe hiçbiri yoktu - kopyayı geri almadan önce bunu tekrar yedeklemek istediğimi kontrol ettim! – Rich

5

Sadece Lib klasörüne tcl klasöründen iki klasör kopyalamak için gereken

Ben Python 2.7

64 bit virtualenvwrapper ile Ubuntu 17.04 üzerinde aynı problem isabet
1

tcl8.5 ve tk8.5

Ben senin virtualenv yerel postactivate script

  1. git tk ve tcl kütüphane yolları ekleyin: workon your-env-name
  2. Yerel postactiave komut dosyasını favori düzenleyicinizle düzenleyin, örneğin: gedit $VIRTUAL_ENV/bin/postactivate
  3. tk ve tcl kitaplık yollarını bulun. Postactivate komut dosyasında uygun yollarla TK_LIBRARY ve TCL_LIBRARY dışa aktarın.Modifiye yolları ile Betiğinize bu satırları ekleyin: deactivate ve workon your-env-name tekrar:

    TK_LIBRARY=/home/kamil/anaconda2/pkgs/tk-8.5 TKPATH=/home/kamil/anaconda2/pkgs/tk-8.5 TCL_LIBRARY=/home/kamil/anaconda2/lib/tcl8.5 export TCL_LIBRARY TK_LIBRARY TKPATH

  4. sizin VIRTUALENV yeniden başlatın
  5. .