2009-10-30 48 views
3

我正在閱讀Allen Downey的書Think Python。對於第4章,必須使用一套稱爲Swampy的模塊。我已經下載並安裝它。Swamppy.1.1 with Python 3

問題是模塊是用Python 2編寫的,我有Python 3(在Windows 7 RC1中)。當我從Swampy運行TurtleWorld模塊時,我得到了關於print和exec語句的錯誤消息,這些語句現在是Python 3中的函數。我通過在GUI和World模塊的代碼中包含帶有print和exec的括號來修正了這些錯誤。我也遇到了一個錯誤,說明找不到Tkinter模塊。事實證明,在Python 3中,模塊名稱拼寫爲小寫字母t。

第三個錯誤更困難:ImportError:沒有名爲tkFont的模塊。

請問有人有什麼想法嗎?謝謝。

+2

我想通了tkFont應該替換爲tkinter.font。然後,我必須將.iteritems()更改爲.items(),並且TurtleWorld的gui最終顯示出來。但是現在我遇到了運行時錯誤:使龜逆轉的butto不起作用,並且由於它由'apply()'內置函數控制,因此Python 3不再支持該函數。 – systemovich 2009-10-30 15:30:04

回答

3

許多重要的第三方庫尚未被Python 3重寫;現在你必須堅持使用Python 2.x。沒有其他辦法了。因爲它說的official Python download page

If you don't know which version to use, start with Python 2.6.4; more existing third party software is compatible with Python 2 than Python 3 right now.

+0

這將是最簡單的。謝謝。我會首先嚐試由Stephen Doyle建議的轉換工具。 – systemovich 2009-10-30 15:18:02

6

它看起來像的Tkinter終於趕上了與Python 3 - tkFont已成爲tkinter.font

http://docs.pythonsprints.com/python3_porting/py-porting.html

#!/usr/bin/env python3.2 
# -*- coding: utf-8 -*- 
# 
#  font_ex.py 
#  

import tkinter 

top = tkinter.Tk() 

butt01 = tkinter.Button(top, text="Hello World", font=('Helvetica', 24,)) 

custom_font_serif = ('Times', 24, 'bold') 
butt02 = tkinter.Button(top, text="Hello World", font=custom_font_serif) 

custom_font_sans = ('Helvetica', 36, 'italic') 
butt03 = tkinter.Button(top, text="Hello World", font=custom_font_sans) 

butt01.pack() 
butt02.pack() 
butt03.pack() 

top.mainloop() 
1

對於Mac用戶:我是一個Python新手,跨越完全相同的來了問題。我正在寫這篇文章,以便其他人不浪費幾個小時試圖弄清楚這一點。以下是您的操作:

  • 由於上述原因,請勿安裝Python 3,即避免必須更改所有Swampy代碼。相反,請下載最新版本的Python 2(我使用2.7.5)。
  • 然後從這裏下載Swampy-2.1.1.tar.gz文件:https://pypi.python.org/pypi/swampy/2.1.1。通過在下載文件夾中雙擊該文件來解壓縮該文件。
  • 打開生成的文件夾Swampy 2.1.1。你應該看到幾個項目,包括文件夾,沼澤。
  • 下面是關鍵步驟:將此文件夾拖動到此路徑中的最後一個:Macintosh HD/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages。重複:將文件夾「swampy」拖放到「site-packages」文件夾中。
  • 一旦你這樣做,在終端中啓動Python並輸入「import swampy.TurtleWorld」。如果您看到V形圖標(>>>)而您沒有看到錯誤信息,那麼您可以繼續上課。