我想要做的是创建一个类(Display),我可以在其中修改任何其他类的Canvas。
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:'Display'对象没有属性'create_text'
我知道我在Display中调用了一个名为'create_text'的函数,但我不知道如何在不继承它的情况下调用tkinter中的Canvas方法。我试图在Display中继承Canvas,我得到的错误是: TypeError:无法为基础对象Canvas
创建一致的方法解析顺序(MRO)感谢所有帮助。
答案 0 :(得分:1)
您可以直接访问对象属性,在这种情况下,您可以说
class ConsolePrint(...):
def __init__(...):
...
self.textField = self.canvas.winCanvas.create_text(0, 0, text="Whatever")
我上面做的另一个更改是你没有为create_text
指定任何参数。但是,你会得到其他错误,但这不是问题所在。
但基本上,您应该重新考虑您的脚本结构。没有必要创建Main
和prun
类,并且通过字符串传递命令实际上不是一个好的决定。封装代码很好,但你有点过头了;)