动态向Tkinter画布添加项目
我正在学习Tkinter,想要创建一个可以实时绘制数据的图形界面。作为测试,我想在每次按下“绘制”按钮时,在画布上画一个多边形,三角形的位置是随机的。我遇到了两个问题:
- 程序一启动,画布上就出现了一个三角形,这是为什么?我该怎么解决这个问题?
- 当我按下按钮时,似乎没有绘制出任何三角形,至少我看不见。
代码:
from Tkinter import *
from random import randint
class App:
def __init__(self,master):
#frame = Frame(master)
#frame.pack(side = LEFT)
self.plotspc = Canvas(master,height = 100, width = 200, bg = "white")
self.plotspc.grid(row=0,column = 2, rowspan = 5)
self.button = Button(master, text = "Quit", fg = "red", \
command = master.quit)
self.button.grid(row=0,column=0)
self.drawbutton = Button(master, text = "Draw", command = \
self.pt([50,50]))
self.drawbutton.grid(row = 0, column = 1)
def pt(self, coords):
coords[0] = coords[0] + randint(-20,20)
coords[1] = coords[1] + randint(-20,20)
x = (0,5,10)
y = (0,10,0)
xp = [coords[0] + xv for xv in x]
yp = [coords[1] + yv for yv in y]
ptf = zip(xp,yp)
self.plotspc.create_polygon(*ptf)
if __name__ == "__main__":
root = Tk()
app = App(root)
root.mainloop()
1 个回答
5
command=self.pt([50,50])
(你在创建“绘制”按钮时用到的那一行代码)会立即执行你所指的那个操作,并把结果(None
)绑定到command
上。相反,你应该在同样的地方使用:
, command=lambda: self.pt([50, 50]) )
这样可以让这个操作在每次按下按钮时才执行,而不是立刻执行。