我知道我能做到。..
import tkinter as tk
root=tk.Tk()
root.geometry("800x600")
#Note if '=' is used, i.e. root.geometry=("800x600")
# then tkinter root(window) does NOT display full area
canv1=tk.Canvas(bg="green", height=150, width=200)
canv1.place(x=20,y=10)
root.mainloop()
理想情况下,我想做很多画布,当我学习类时,我想到这可以通过使用类来完成,这样我就可以更容易,更快速地示例化用户定义的画布。..canv2 = InstantCanvas(橙子,100,250)
我觉得这似乎是合理的:
import tkinter as tk
root=tk.Tk()
root.geometry("400x300")
class InstantCanvas():
def __init__(self, background, height, width):
self = self.tk.Canvas(background, height, width)
# trying to achieve "my_user_canvas.
#Note if '=' is used, i.e. root.geometry=("800x600")
# then tkinter root(window) does NOT display full area
# Reference canvas, manually made
canv1=tk.Canvas(bg="green", height=150, width=200)
canv1.place(x=20,y=10)
canv2 = InstantCanvas("orange", 100, 250)
canv2.place(x=40,y=50)
root.mainloop()
但我得到一个错误。..AttributeError:“InstantCanvas”对象没有属性“tk”
所以我必须把import tkinter as tk
放在类init函数中?看起来很奇怪和多余,但我还是试了。..
import tkinter as tk
root=tk.Tk()
root.geometry("400x300")
class InstantCanvas():
import tkinter as tk
def __init__(self, background, height, width):
self = self.tk.Canvas(background, height, width)
# trying to achieve "my_user_canvas.
#Note if '=' is used, i.e. root.geometry=("800x600")
# then tkinter root(window) does NOT display full area
# Reference canvas, manually made
canv1=tk.Canvas(bg="green", height=150, width=200)
canv1.place(x=20,y=10)
canv2 = InstantCanvas("orange", 100, 250)
canv2.place(x=40,y=50)
root.mainloop()
现在我得到了太多的参数错误,特别是Canvas。init()接受1到3个位置参数,但有4个被给出了,但我认为init有点忽略了 self 作为一个“硬”参数,但如果我把 self 去掉,那么我的init函数将无法“连接”到示例化的对象。那怎么做
关于为什么它不起作用以及如何使它起作用的反馈将不胜感激。Tq.
1条答案
按热度按时间kgsdhlau1#
对于您的目的,似乎最好只是子类
tk.Canvas
,然后调用super()
来初始化画布。