从单独的类修改tkinter画布

2024-03-29 00:04:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是创建一个类(Display),在这里我可以从任何其他类修改画布。在

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.textfield公司= self.canvas.create_文本()

出现的错误是: AttributeError:“Display”对象没有属性“create\u text”

我知道我在Display中调用一个名为“create_text”的函数,但是我不知道如何在不继承的情况下调用tkinter中的Canvas方法。我试图继承Display中的Canvas,得到的错误是: TypeError:无法为基本对象Canvas创建一致的方法解析顺序(MRO)

感谢所有的帮助。在


Tags: textselfcmdobjectmaindefcreatedisplay
1条回答
网友
1楼 · 发布于 2024-03-29 00:04:46

你可以直接访问对象属性,在这种情况下,你可以说

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

我在上面做的另一个更改是您没有为create_text指定任何参数。不过,你会得到其他错误,但这不是问题所在。在

但基本上,你应该重新考虑你的脚本结构。没有必要创建Mainprun类,通过字符串传递命令确实不是一个好的决定。封装代码很好,但是你做得有点过头了;)

相关问题 更多 >