Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python将图像绑定到tkinter画布_Python_Astronomy - Fatal编程技术网

用Python将图像绑定到tkinter画布

用Python将图像绑定到tkinter画布,python,astronomy,Python,Astronomy,有关快速摘要,请参见下面代码块的要点 为了进行研究,我正试图用python编写一个测光程序(我知道有软件,但我自己编写这个程序有一个特定的原因)。我将Anaconda与Python3.6结合使用,可以获得要渲染的FITS文件图像,但我希望能够单击一个点并执行测光 基本上,我希望将图像绑定到tkinter画布,并通过单击事件返回位置 我一直在研究几乎完全相同的问题,但关键区别在于我使用的是FITS文件和Python3.6(这改变了该示例中的许多特性) 到目前为止,我的代码(使用了该示例显示的大部分

有关快速摘要,请参见下面代码块的要点

为了进行研究,我正试图用python编写一个测光程序(我知道有软件,但我自己编写这个程序有一个特定的原因)。我将Anaconda与Python3.6结合使用,可以获得要渲染的FITS文件图像,但我希望能够单击一个点并执行测光

基本上,我希望将图像绑定到tkinter画布,并通过单击事件返回位置

我一直在研究几乎完全相同的问题,但关键区别在于我使用的是FITS文件和Python3.6(这改变了该示例中的许多特性)

到目前为止,我的代码(使用了该示例显示的大部分内容)是:

也就是说:

TypeError:\uuuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

要点:
我无法将FITS图像绑定到tkinter画布。我不知道如何单击该图像并获得鼠标单击的位置。我希望能够单击几个点,获取它们的位置,并使用这些位置绘制几个环空。


我还有很多其他问题,但这是我目前的主要障碍。最终,我将尝试跟踪它们(移动到下一张图片,搜索大致相同的区域,直到我再次找到对象,放置环)并计算其中的像素,但我可以稍后跨越这座桥(除非现在有人有想法)。

您必须对代码进行一些更改。首先,我希望使用Tkinter中的Place()方法。您可以在这里查看place方法

第二件事:通过使用place方法,它将适合您的应用程序

提示:Place()。因此,这两个元素可以使用Place()在Tkinter中重叠,但在网格中不可能重叠


现在使用Place()方法将图像放置在Tkinter窗口中的某个区域,假设图像大小为100x100,然后使用函数调用制作一个按钮,并将其放置在图像后面,给出相同的坐标in Place()方法。因此,当用户单击图像时,它实际上会调用按钮后面的函数。

与一些人交谈后,我发现问题在于tkinter画布需要.gif或.png等文件类型将图像绑定到画布。所以我改变了

pic = plt.imshow(scidata, cmap=plt.cm.gray, vmin=display_min, vmax=display_max, origin="lower")

将我的numpy数组保存为gif文件,长度刚好可以绑定,然后将其删除

底线:将FITS文件转换为.gif或其他兼容类型

这可能不是最优雅的修复方法,但它起了作用

#Add image
hold = tk.PhotoImage(pic)
canvas.create_image(0,0,image=hold,anchor="nw")
pic = plt.imshow(scidata, cmap=plt.cm.gray, vmin=display_min, vmax=display_max, origin="lower")
plt.imsave("tempimgfile.gif", scidata, cmap=plt.cm.gray, vmin=display_min, vmax=display_max, origin="lower")
hold = tk.PhotoImage(pic)
hold = tk.PhotoImage(file="tempimgfile.gif")