【问题标题】:Dynamically add items to Tkinter Canvas将项目动态添加到 Tkinter Canvas
【发布时间】:2011-02-18 22:10:17
【问题描述】:

我正在尝试学习 Tkinter,目标是能够创建一个“实时”范围来绘制数据。作为测试,每次按下“绘制”按钮时,我都会尝试在画布上绘制一个多边形。三角形位置是随机的。我有两个问题:

  1. 程序一启动,画布上就会出现一个三角形,为什么以及如何解决这个问题?
  2. 当我按下按钮时,它没有画出任何三角形,至少我看不到。

代码:

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()

【问题讨论】:

    标签: python dynamic tkinter-canvas


    【解决方案1】:

    command=self.pt([50,50])(您在构建绘制按钮的Button 调用中使用)立即执行您告诉它执行的调用,并绑定结果 (None)到command。相反,使用相同的:

    , command=lambda: self.pt([50, 50]) )
    

    在每次按下该按钮时延迟调用的执行。

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 2021-10-31
      • 2011-11-15
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多