同一画布上的多个图形

Posted

技术标签:

【中文标题】同一画布上的多个图形【英文标题】:Multiple Figures on same canvas 【发布时间】:2019-04-04 09:18:00 【问题描述】:

我想在按下按钮时使用 tkinter Python 在同一画布上绘制多个图形,即当第一次按下按钮时我想显示 image1 而当第二次按下按钮时我想显示 image2 等等.与此并行的是,我在位于画布旁边的树视图中添加图像的名称。我还想要一个功能,当我单击任何树视图条目时,我应该在画布上绘制该特定图像,并且其他图像/图形应该存在于内存中。使用的代码如下:

def canvas_pic():
    # asking the user to select the image file using tkinter "askopenfilename"
    canvas_pic.counter += 1
    tree.insert("", canvas_pic.counter, "dir"+str(canvas_pic.counter), 
         text="Image"+str(canvas_pic.counter))
    ax = fig.add_subplot(111)
    ax.imshow(image)
    canvas.draw()

fig = Figure(figsize=(15, 2), dpi=100)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1, padx=10, pady=5)

我们将不胜感激任何形式的帮助。

正如“ZF007”所建议的那样,该解决方案对我有用,工作解决方案是:

def canvas_pic():
    # asking the user to select the image file using tkinter "askopenfilename"
    canvas_pic.counter += 1
    tree.insert("", canvas_pic.counter, "dir"+str(canvas_pic.counter), 
         text="Image"+str(canvas_pic.counter))

    global dct_array
    if (canvas_pic.counter == 1):
        dct_array = 

    dct_array["dir"+str(canvas_pic.counter)] = image as an array loaded above

def image_draw():
    rowno = 'selected treeview element'
    image_display = dct_array[rowno]
    ax = fig.add_subplot(111)
    ax.imshow(image_display, cmap='gist_rainbow')
    ax.set(title="",xticks=[], yticks=[])
    canvas.draw() 

【问题讨论】:

pythonprogramming.net/python-3-tkinter-basics-tutorial 和 ...显示您迄今为止尝试过的代码... 每次单击按钮时,上述代码都会出现问题,新图像会添加到覆盖在旧图像上的画布中。现在假设如果我想取回旧图像,例如。目前画布正在画布上显示 image2,如果我在树视图条目中单击 Image1,那么我如何将 image1 绘制到画布上? 您需要创建一个 numpy 容器,以附加方式存储所有图像。这样可以确保位置 1 是图像 1,等等。然后是第二个函数,您的输入是要显示的所需图像的数量。 感谢 ZF007 的好意建议...您的想法很成功...出现了一个新问题,即当我单击特定树元素时,图像未显示在画布立即显示,但在调整窗口大小后显示? 很高兴它为您解决了问题。将您的答案发布为新答案。然后,您也可以选择它作为最佳答案。 【参考方案1】:

正如“ZF007”所建议的那样,该解决方案对我有用,工作解决方案是:

def canvas_pic():
    # asking the user to select the image file using tkinter "askopenfilename"
    canvas_pic.counter += 1
    tree.insert("", canvas_pic.counter, "dir"+str(canvas_pic.counter), 
         text="Image"+str(canvas_pic.counter))

    global dct_array
    if (canvas_pic.counter == 1):
        dct_array = 

    dct_array["dir"+str(canvas_pic.counter)] = image as an array loaded above

def image_draw():
    rowno = 'selected treeview element'
    image_display = dct_array[rowno]
    ax = fig.add_subplot(111)
    ax.imshow(image_display, cmap='gist_rainbow')
    ax.set(title="",xticks=[], yticks=[])
    canvas.draw() 

【讨论】:

以上是关于同一画布上的多个图形的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不显示在页面/画布上的情况下获得图形的基数 64(Graph.Js)

visio怎么移动图形不是画布

Chart.js画布调整大小

canvas用这个属性来画组合图形

感谢matplotlib,如何在同一图中显示具有重叠数据的多个图形?

Chart.js 画布调整大小