2014-09-05 70 views
0

我想要做的是創建一個類(顯示),我可以從任何其他類修改畫布。從一個單獨的類修改tkinter畫布

from tkinter import * 

#--------# Main #--------# 

class Main(): 
    def Setup(self): 
     Display('makeCanvas') 
     prun('Setup') 

#--------# Display #--------# 

class Display(object): 
    def __init__(self, cmd):   
     win = Tk() 
     win.geometry('500x500') 
     self.winCanvas = Canvas(master=win) 

     if(cmd == 'makeCanvas'): 
      self.winCanvas = Canvas(width=500, height=500) 
     elif(cmd == 'startLoop'): 
      mainloop() 
     elif(cmd == 'getCanvas'): 
      self.sendCanvas() 
     else: 
      print('Failed') 

     self.winCanvas.pack() 
    def sendCanvas(self): 
     return self.winCanvas 

#--------# ConsolePrint #--------# 

class ConsolePrint(Display, object): 

    def __init__(self, text_given): 
     self.tx_g = text_given 
     self.totalText = '' 
     self.canvas = Display('getCanvas') 

----> self.textFeild = self.canvas.create_text() 

    def Console(self): 
     print("Console") 
     self.totalText += (self.tx_g + '\n') 
     self.textFeild.append(text=('Console: ' + self.totalText)) 
     self.textFeild.pack() 

class prun(object): 
    def __init__(self, text_given): 
     print("Printing") 
     printer = ConsolePrint(str('*Running: ' + str(text_given) + '*')) 
     print("Now the Console") 
     printer.Console() 

Main().Setup() 

及其這條線的不工作的代碼: self.textFeild = self.canvas.create_text()

,來了是誤差: AttributeError的: '顯示' 對象沒有屬性'create_text'

我知道我正在調用Display中的一個名爲'create_text'的函數,但我不知道如何調用tkinter中的Canvas方法而不繼承它。我試圖在顯示中繼承Canvas,而我得到的錯誤是: TypeError:無法爲基礎對象創建一致的方法解析順序(MRO),Canvas

所有幫助表示讚賞。

+1

嘿,你拼寫的字段錯了:) – W1ll1amvl 2014-09-05 23:38:28

回答

1

您可以直接訪問對象的屬性,在這種情況下,你可以只說

class ConsolePrint(...): 
    def __init__(...): 
     ... 
     self.textField = self.canvas.winCanvas.create_text(0, 0, text="Whatever") 

另一項改變我上面做的是,你還沒有指定任何參數create_text。不過,你會得到其他的錯誤,但這不是問題。

但基本上,你應該重新思考你的腳本結構。沒有必要創建Mainprun類,並且通過字符串傳遞命令並不是一個好的決定。 Capsuling code is good,but you're overdoing a bit;)