我正在尝试使用Python脚本做两件事:
对于所有图像/图像标题对:
cv2.imshow(...)
tk.Text(self.root)
但是,这会导致崩溃。或者至少...... 通常导致它崩溃(它输出一堆奇怪的错误然后python [或ipython,取决于我正在使用的]退出)。这些错误的形式如下:
Python[50566:37729544] *** Terminating app due to uncaught exception NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x7fb960319cc0'
如果我不使用openCV显示图像,我可以废除这些错误。我怀疑它与cv2.imshow
和Tk之间的交互有关,或者我的Tk代码编写得有多糟糕,但即使这个荒谬的hacky工作花了很长时间才能生成。我不确定是不是因为我是白痴,但是Tk文档似乎非常复杂(即使是关于Tk的简单问题似乎也有这种形式的答案:“当然你可以做到这一点!但这完全不可能给你一个快速的答案;首先,你必须仔细阅读关于如何进行回调,切换和行话的变幻莫测的文件,以及我以前从未听过的和Tk这样的话。玩得开心!“)。
为可编辑标题生成窗口的代码是这样的。我确信它在使用Tk时违反了许多原则:
class editcap():
# allows editing of the captions
def __init__(self, caption):
self.precap = caption
def get(self):
self.caption = self.text.get("1.0",tk.END)
self.root.destroy()
def getesc(self, event):
self.caption = event.widget.get("1.0",tk.END)
self.root.destroy()
def disp(self):
self.root = tk.Tk() # it crashes here
self.text = tk.Text(self.root)
self.text.insert(tk.INSERT, self.precap)
self.text.pack()
submit = tk.Button(self.root, text ="Submit", command = self.get)
submit.pack(side = tk.BOTTOM)
self.text.bind('<Escape>', self.getesc)
self.root.mainloop()
return self.caption
通过opencv显示图像
def display_img(post):
img = get_image(post) # saves the image from web if it hasn't already been saved, load via plt.imread()
if resample_to != None:
wxr = resample_to * 1. / img.shape[1]
hx = img.shape[0] * wxr
img = cv2.resize(cv2.cvtColor(img, cv2.COLOR_RGB2BGR), (resample_to, int(hx)))
cv2.imshow('img',img)