2013-02-21 192 views
0

我正在開發與Tkinter reStructuredText編輯器。如果我運行下面的代碼,我得到IndentationError ..Python Tkinter不創建按鈕

from Tkinter import * 
from tkFileDialog import asksaveasfile as savefile 

class RSTkinter: 
    def __init__(self): 
     self.pencere_load() 
     self.araclar() 

    def pencere_load(self): 
     pencere.resizable(width=FALSE,height=FALSE) 
     pencere.title("RSTkinter") 

    def araclar(self): 
     h1 = Button(text=u"Başlıklar",command=self.h1p) 
     h1.place(rely=0.0) 

     .. 
     .. 

     topic = Button(text="Topic",command=self.topic_p) # ..topic:: başlık \n\t içerik 
     topic.place(rely=0.0,relx=0.63) 

    def topic_p(self): 
     topic = Toplevel() 
     topic.title("RSTkinter - Not") 
     topic.resizable(width=FALSE,height=FALSE) 
     topic.geometry("200x140") 

     topic_b_l = Label(topic,text=u"Topic başlığı: ") 
     topic_b_l.place(relx=0.0,rely=0.0) 

     self.topic_b = Text(topic) 
     self.topic_b.place(relx=0.3,rely=0.0,width=130) 

     topic_i_l = Label(topic,text=u"Topiç içeriği") 
     topic_i_l.place(relx=0.0,rely=0.4) 

     self.topic_i = Text(topic) 
     self.topic_i.place(relx=0.3,rely=0.5,width=130) 

     topic_y = Button(topic,text=u"Ekle",command=self.topic_yap) 
     topic_y.place(relx=0.0,rely=0.2) 

    def topic_yap(self): 
     return self.metin.insert(END,"\n.. topic:: %s \n\t%s"%(self.topic_b.get(1.0,END)),self.topic_i.get(1.0,END))) 

pencere = Tk() 
rst = RSTkinter() 

mainloop() 

完整的錯誤:

File "RSTkinter15.py", line 85 
topic = Button(text="Topic",command=self.topic_p) #..^
IndentationError: unexpected indent 

我該怎麼辦?

+0

你是否在混合標籤和空格? [鏈接](http://stackoverflow.com/search?q= [python] IndentationError) – 2013-02-21 13:48:30

回答

-1

當我寫代碼來解決identation最好的辦法是轉到上面的問題的行,然後單擊行的末尾,以便你的光標是存在的。然後按回車鍵,並在下一行放置正確的縮進。我所做的就是不斷按下Delete按鈕將代碼從下面移動到python shell爲我製作的新縮進處。

+0

沒有任何事情與報告的縮進錯誤有關。 – 2013-02-21 11:54:37

+0

@BryanOakley我重申了這個答案它現在是主題。 – 2013-02-27 18:04:31

1

如果錯誤消息告訴你,你有一個壓痕錯誤,它可能是安全的假設這是真的。調試時的經驗法則是始終相信編譯器/解釋器告訴你什麼。

很可能你混合了空格和製表符 - 這是python的弱點之一。仔細檢查你是否在該行和前一行上使用了相同的空格和製表符組合。

+0

只是爲了補充一點,大多數編輯可以選擇用空格替換所有的製表符,反之亦然。比手動操作快得多。 – gozzilli 2013-02-22 09:00:47

0

這通常是一個問題時,例如,編程與幾個人在一張代碼或編程與多個編輯器(具有不同的默認設置):一個用途(雙層/四合一)間距,其他標籤。爲了解決這個問題,我總是使用內置的替換編輯功能(使用正則表達式):

' ' => '\t' # search four spaces, replace with tab 
' ' => '\t'  # search two spaces, replace with tab 

「全部替換」,然後是非常有用的,但要小心:你不想改變太多!按照這個順序(否則你會將所有的四倍間距改爲兩個製表符)。