Tkinter GUI图像带按钮

时间:2017-07-24 17:29:09

标签: python user-interface tkinter

我目前正在使用Tkinter工作的交互式GUI,它可以使用BMP图像。基本上,我希望能够单击一个按钮,然后允许用户在图像上指定任意三个点,然后生成最佳拟合椭圆并返回椭圆内的最小值。

我能够制作BMP图像,但是我不知道如何制作带图像的按钮。我该怎么做呢?

单击按钮后,它将执行一个功能,将鼠标光标更改为十字准线,然后在图像上的任意三个点上单击并将它们保存到变量中,我将在以后生成该变量以生成椭圆。我希望点击产生一个红点来表示它的位置。

这是我的代码:

from tkinter import *
from PIL import Image, ImageTk

def bmpGUI():
    top=Tk()

    top.title("BMP Image")

    image = Image.open("ap41.ddr.brf.sdat.bmp")
    widthBMP, heightBMP = image.size
    tkimage = ImageTk.PhotoImage(image)
    w = Canvas(top, width=widthBMP+200, height=heightBMP)
    w.create_image((widthBMP/2,heightBMP/2),image=tkimage)

    w.pack()

    top.mainloop()
    return

def main():
    bmpGUI()

if __name__ == "__main__":
    main()

我在宽度上添加了200px,以表明我想在图像旁边放置一个交互式侧边栏。

1 个答案:

答案 0 :(得分:0)

我建议为画布使用比w更有用的变量名称,为了使其工作,画布需要全局化

tkimage.configure(cursor="plus")
w.bind("<Button-1>", imgClick)

pos = []
def imgClick(e):
    x=w.canvasx(e.x)
    y=w.canvasy(e.y)
    pos.append((x,y))
    w.create_line(x-5,y,x+5,y, fill="red", tags="crosshair")
    w.create_line(x,y-5,x,y+5, fill="red", tags="crosshair")

当你拥有所有3个职位时,你可以使用w.delete("crosshair")