gpt4 book ai didi

python - 无需按下按钮即可执行命令

转载 作者:太空宇宙 更新时间:2023-11-03 22:26:56 24 4
gpt4 key购买 nike

我在按下按钮(使用 Tkinter)执行命令时遇到问题。

我这样定义函数:

refPt = []
cropping = False

def main(image_dir):
def click_and_crop(event, x, y, flags, param):
global refPt, cropping


if event == cv2.EVENT_LBUTTONDOWN:
refPt = [(x, y)]
cropping = True


elif event == cv2.EVENT_LBUTTONUP:

refPt.append((x, y))
cropping = False


cv2.rectangle(image, refPt[0], refPt[1], (0, 255, 0), 2)
cv2.imshow("image", image)

image=cv2.imread(image_dir)
print (image.dtype)
clone = image.copy()
cv2.namedWindow("image")
cv2.setMouseCallback("image", click_and_crop)

while True:

cv2.imshow("image", image)
key = cv2.waitKey(1) & 0xFF


if key == ord("r"):
image = clone.copy()


elif key == ord("c"):
break


if len(refPt) == 2:
roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]]
cv2.imshow("ROI", roi)
cv2.waitKey(0)
cv2.imwrite('template.tif',roi)

cv2.destroyAllWindows()

当我单独测试时,它工作正常。

这是我的 GUI 代码的一小部分:

window = tkinter.Tk() window.title("Analog2Digital Transform") 
b2 = tkinter.Button(window, text="Start", command=main('7_7026_polowa.tif'), width=10, heigh=10)

现在,当我运行我的脚本时,函数 main() 在显示 GUI 窗口之前执行。此外,它还使用了函数参数 - main('7_7026_polowa.tif'),它包含在 GUI 代码中。函数定义或 GUI 代码有问题吗?

最佳答案

如果您想使用命令参数将函数绑定(bind)到小部件,则不能有括号。

command = main

因为有了它们,它会调用函数。如果你想绑定(bind)函数并传入一个值,那么你应该看看 lambda

command = lambda : main('7_7026_polowa.tif')

如果您使用绑定(bind)方法而不是命令参数将函数绑定(bind)到小部件,那么您需要 lambda 来获取事件对象。

mywidget.bind("<ButtonRelease-1>", lambda e : function(e, value) )

或者,如果您不使用事件对象,则无需将其传递给函数。

mywidget.bind("<ButtonRelease-1>", lambda e : function(value) )

关于python - 无需按下按钮即可执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com