2013-06-01 39 views
0

我基本上是爲一個基本的pygame繪圖應用程序編寫一個模塊。即時通訊使用Tk窗口來獲取自定義顏色的三個顏色值。我有一個開放的開始感到困惑,做,但我不能圖如何把一切工作以及三個色值和IM傳統知識的窗口和askes類和函數的故障

這裏是我的Tk的窗口代碼的文件:

from Tkinter import * 

class Custom(): 
    def get_color(self): 
     root = Tk() 
     root.configure(background='black') 
     root.wm_title("Custom") 

     label1 = Label(root, text='Red Value:',bg="black", fg="white") 
     label1.grid(row=2, column=0,columnspan=2) 
     enter1 = Entry(root, bg='white') 
     enter1.grid(row=3, column=0,columnspan=2) 


     label2 = Label(root, text='Green Value:',bg="black", fg="white") 
     label2.grid(row=4, column=0,columnspan=2) 
     enter2 = Entry(root, bg='white') 
     enter2.grid(row=5, column=0, columnspan=2) 

     label3 = Label(root, text='Blue Value:',bg="black", fg="white") 
     label3.grid(row=6, column=0,columnspan=2) 
     enter3 = Entry(root, bg='white') 
     enter3.grid(row=7, column=0, columnspan=2) 

     btn1 = Button(root, text='OK', command= self.return_color, bg="black",activebackground="green", fg="white") 
     btn1.grid(row=14, column=0, columnspan=2) 
     label7 = Label(root, bg="black", fg = "white") 
     label7.grid(row=15, column=0, columnspan=2) 

     enter1.focus() 

     root.mainloop() 

    def return_color(self): 
     try: 
      r = str(self.enter1.get()) 
      g = str(self.enter2.get()) 
      b = str(self.enter3.get()) 
     except ValueError: 
      window.label7.config(text='Enter Numbers!', fg = "red") 
     root.destroy() 
     return (r,g,b) 

c = Custom() 
c.get_color() 

它的工作原理,但我試圖能夠導入它,所以我做了兩個功能,並把它們放在一個類,但現在我很困惑,我需要運行get_color然後當我點擊確定按鈕,我需要運行return_color我不dont知道如果這是做到這一點的方式我只是在嘗試各種不同的事情它說return_color不能得到self.enter1.get()相同的輸入2和3

這裏就是IM給我拉延襯墊程序:

if key[pygame.K_c]: 
    import CustomColor 
    c = CustomColor.Custom() 
    c.get_color() 
    self.color = c.return_color() 

IM開始變得真的很困惑,如果有人可以清除所有這一切了,我會這麼感謝FUL!

回答

3

問題是沒有使用返回值return_color,因爲使用作爲命令選項傳遞的函數的引用來調用它,但不用於存儲結果。你可以做的是將值作爲類的屬性存儲在return_colorget_color呼叫後添加return語句來啓動主循環:

def get_color() 
    # Initialize the attributes with a default value 
    self.r = '' 
    self.g = '' 
    self.b = '' 
    # ... 
    root.mainloop() 
    return self.r, self.g, self.b 

def return_color(self): 
    # Entry.get returns a string, don't need to call to str() 
    self.r = self.enter1.get() 
    self.g = self.enter2.get() 
    self.b = self.enter3.get() 
    root.destroy() 

使用顏色之前,您可以檢查格式正確。那麼我建議你用更有意義的名字來重新命名這些函數;並創建一個Tk元素,將其撤回並在類中使用Toplevel(如果創建多個Custom對象,則實際上創建了多個Tk元素,這是應該避免的)。

+0

我的問題是它告訴我,Custom實例沒有屬性'enter1',即使它在類 – Serial

+1

@ChristianCareaga那是因爲你忘了將它們設置爲類的屬性:使用'self.enter1 = .. .'代替'get_color'中的'enter1 = ...'。 –

+0

好吧,我們走了我知道了,所以我應該保持按鍵事件部分一樣嗎? – Serial