2016-05-23 128 views
2

我知道你會說這是一個重複,但它確實不是。即時得到錯誤:_tkinter模塊沒有找到

Traceback (most recent call last): File "calculator.py", line 1, in <module> from tkinter import * File "/usr/local/lib/python3.4/tkinter/__init__.py", line 38, in <module> import _tkinter # If this fails your Python may not be configured for Tk ImportError: No module named '_tkinter'

我經歷的每一個網站給所有的錯誤和解決方案,包括這一次我有
更新我的操作系統到最新的系統
安裝Tkinter的
安裝的python-tk的走了
安裝python3-TK
安裝TK-dev的
安裝TCL
安裝了一切,但我仍然得到ER ROR。它讓我瘋狂,我正在努力學習如何創建一個GUI,這樣我的腳本可以更好地幫助那些不知道命令行腳本的人。但是,如果我的練習腳本沒有任何工作,那麼我無法做任何事情。這是我正在運行的腳本,如果你想看到它。沒什麼特別的。

from tkinter import * 

def iCalc(source, side): 
    storeObj = Frame(source, borderwidth=4, db=4, bg="red") 
    storeObj.pack(side=side, expand=YES, fill=BOTH) 
    return storeObj 

def button(source, side, text, command=None): 
    storeObj = Button(source, text=text, command=command) 
    storeObj.pack(side=side, expand=YES, fill=BOTH) 


class app(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     self.option_add('*Font', 'arial 20 bold') 
     self.pack(expand=YES, fill=BOTH) 
     self.master.title('Calculatorinator') 


     display = StringVar() 
     Entry(self, relief=RIDGE, 
      textvariable=display, justify='right', bd=30, bg="red").pack(side=TOP, expand=YES, 
       fill=BOTH) 

    for clearBut in (["CE"], ["C"]): 
      erase=iCalc(self, TOP) 
      for ichar in clearBut: 
       button(erase, LEFT,ichar, 
         lambda storeObj=display, q=ichar:storeObj.set('')) 

    for NumBut in ("789/", "456*", "123-", "0.+"): 
     FunctionNum = iCalc(self, TOP) 
     for char in NumBut: 
      button(FunctionNum, LEFT, char, 
       lambda storeObj=display, q=char: storeObj.set(storeObj.get() + q)) 

    EqualsButton = iCalc(self, TOP) 
    for iEquals in "=": 
     if iEquals == '=': 
      btniEquals = button(EqualsButton, LEFT, iEquals) 
      btniEquals.bind('<ButtonRelease-1>', 
       lambda e, s=self, storeObj=display: s.calc(storeObj), '+') 
     else: 
      btniEquals = button(EqualsButton, LEFT, iEquals, 
       lambda storeObj=display, s=' %s '%iEquals: storeObj.set(storeObj.get()+s)) 

if __name__ == '__main__': 
    app().mainloop() 

更新:現在它甚至不會讓我空轉:idle3.4 ** IDLE can't import Tkinter. Your Python may not be configured for Tk. **

+0

你有蟒蛇2.7和3個標記這是什麼呢? – EoinS

+0

@EoinS我有兩個。我的os在2.7上運行,但是我也可以運行python3,因爲iIhave它也安裝在單獨的部分中。如果我想運行它作爲python 2.7我只是告訴它運行它作爲python文件'python calculator.py'或者如果我想運行它在python 3我告訴它'python3 calculator.py' – Matt

回答

2

這部分回溯表明tkinter i S是從/usr/local/lib/python3.4

File "/usr/local/lib/python3.4/tkinter/__init__.py", line 38, in <module> 
    import _tkinter # If this fails your Python may not be configured for Tk 

加載即的Tkinter已經手動安裝(不通過的軟件包管理器),以/usr/local/lib/python3.4

但是,這意味着你已經安裝了Python和Tkinter的使用包管理器。

Updated my OS to the latest system installed tkinter installed python-tk installed python3-tk

我想你可能需要刪除安裝Tkinter的/usr/local/lib/python3.4/tkinter如果你有Tkinter的也作爲一個軟件包安裝(Ubuntu的軟件包?),或重命名的目錄並做一些測試。

+0

好吧,生病第一次刪除安裝到python3.4的目錄 – Matt

+0

現在工作...以及沒有工作,但不再給我「無模塊」的錯誤 – Matt

2

的Python 2.7的標記,您使用的Python的版本。

在Python 2.7中,模塊是Tkinter,它只在Python 3中更改爲tkinter。模塊名稱區分大小寫。

嘗試

From Tkinter import * 

如果您使用的是Mac OS有可能是several issues使用TK

這裏有個安裝文檔,非常有幫助:tk docs

從你應該在終端窗口那麼可以運行一個Python shell: %/usr/local/bin/python3.4 這應該會給你一個Python命令提示符。從提示符下,輸入以下兩條命令:

import tkinter 
tkinter._test() 

這應該彈出一個小窗口;在窗口頂部的第一行應該說

"This is Tcl/Tk version 8.5"; make sure it is not 8.4! 

您還可以得到的正在使用的Tcl/Tk的準確版本:

tkinter.Tcl().eval('info patchlevel') 

應該返回的東西像

'8.5.18'. 
Verified install using ActiveTcl 8.5.18.0 and Python   3.4.3 from python.org on Mac OS X 10.10.3. 
+0

這是正確的 –

+0

我有2.7和3.4。我的os在2.7上運行,但是我也可以運行python3,因爲iIhave它也安裝在單獨的部分中。如果我想運行它作爲python 2.7我只是告訴它運行它作爲python文件python calculator.py或者如果我想運行它在python 3我告訴它python3 calculator.py – Matt

+0

此外,我已經嘗試過tkinter和Tkinter的。我得到的錯誤,無論我在2.7或3上運行它。我的操作系統是薄荷 – Matt

1

也許爲時已晚,但是......)

1)5號線:在 '高清按鈕' BD'而不是 '數據庫'

2)你沒有返回storeObj

3 )''class app'all loop'for'should'in'init'。縮進

4)你的應用程序沒有必須屬性「鈣」

def calc(self, display): 
    try: 
     display.set(eval(display.get())) 
    except: 
     display.set('ERROR')