【问题标题】:Tkinter GUI Image w/ Button带有按钮的 Tkinter GUI 图像
【发布时间】:2017-07-24 17:29:08
【问题描述】:

我目前正在开发一个使用 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()

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

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    我建议为画布使用比 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")

    【讨论】:

      猜你喜欢
      • 2014-12-07
      • 2017-06-15
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多