2014-09-05 73 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;)