动态添加项目到 Tkinter Canvas
我正在尝试学习 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()
I'm attempting to learn Tkinter with the goal of being able to create a 'real-time' scope to plot data. As a test, I'm trying to draw a polygon on the canvas every time the 'draw' button is pressed. The triangle position is randomized. I have two problems:
- There is a triangle on the canvas as soon as the program starts, why and how do I fix this?
- It doesn't draw any triangles when I press the button, at least none that I can see.
Code:
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()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
command=self.pt([50,50])
(您在构建绘制按钮的Button
调用中使用)立即执行调用您告诉它执行的内容,并将结果 (None
) 绑定到command
。相反,使用相同的方法:将调用的执行延迟到每次按下该按钮时。
command=self.pt([50,50])
(that you use in theButton
call which builds the Draw button) immediately executes the call you're telling it to execute, and binds the result (None
) tocommand
. Use, instead, in that same:to delay the execution of the call to each time that button will be pressed.