tkinter集成OpenCV开发时UploadAction函数返回函数对象而非路径问题
问题原因
你没有正确调用函数,而是将函数对象本身赋值给了变量:
- 代码中
mystr = UploadAction的写法没有加调用标识(),此时mystr存储的是UploadAction函数的内存引用,不是函数执行后的返回值,你看到的<function UploadAction at 0x00000246B6A42E50>就是函数对象的标准打印格式。 - 你在函数内部打印路径正常,是因为
askopenfilename在函数内部逻辑执行时是正常运行的,只是你没有通过正确的调用方式拿到它的返回值。
修正方案
1. 基础语法修正
调用函数时必须添加括号,才能拿到函数返回的路径字符串:
# 错误写法:赋值函数对象 # mystr = UploadAction # 正确写法:执行函数,获取返回的路径字符串 mystr = UploadAction()
2. 执行逻辑调整
你当前把cv.imread写在全局作用域,会在程序启动时就直接执行,早于你点击按钮选择文件的操作,需要把图片读取的逻辑放到触发流程内,避免读取空路径报错,参考调整后的代码:
import cv2 as cv from tkinter import filedialog def UploadAction(): file = filedialog.askopenfilename() print("选择的文件路径:", file) return file def Image(event=None): # 点击按钮后再依次执行选择文件、读取图片、展示图片逻辑 file_path = UploadAction() # 判空避免用户取消选择文件时报错 if not file_path: return img = cv.imread(file_path) cv.imshow('img', img) cv.waitKey(0) cv.destroyAllWindows()
内容的提问来源于stack exchange,提问作者BadDog
相关产品推荐
相关产品推荐

