def start(): global img, pre_pts try: root = tk.Tk() root.withdraw() f_path = filedialog.askopenfilename() if not f_path: messagebox.showinfo('提示', '请选取有效图片') else: img = cv.imread(f_path) pre_pts = -1, -1 cv.namedWindow('picture', cv.WINDOW_NORMAL) cv.resizeWindow('picture', 256, 256) cv.moveWindow('picture', 600, 300) cv.imshow('picture', img) cv.setMouseCallback('picture', draw) cv.waitKey(0) cv.destroyAllWindows() root.destroy() except Exception as e: print("出现错误:", e) 报错后如何修改可以使下面主界面可以重新点击执行start函数,且这个start函数已经有返回值,还和主界面不在同一个py文件中:class Faceshow(QMainWindow, Ui_MainWindow): def init(self, parent=None): super(Faceshow, self).init(parent) self.setupUi(self) self.main_button.clicked.connect(start)
时间: 2023-06-13 21:07:43 浏览: 161
你可以在 start 函数的 except 代码块中添加一个 return 语句来返回一个错误标记。然后在主界面中通过判断是否返回了错误标记来决定是否重新执行 start 函数。具体代码修改如下:
```
def start():
global img, pre_pts
try:
root = tk.Tk()
root.withdraw()
f_path = filedialog.askopenfilename()
if not f_path:
messagebox.showinfo('提示', '请选取有效图片')
return "error" # 添加返回错误标记
else:
img = cv.imread(f_path)
pre_pts = -1, -1
cv.namedWindow('picture', cv.WINDOW_NORMAL)
cv.resizeWindow('picture', 256, 256)
cv.moveWindow('picture', 600, 300)
cv.imshow('picture', img)
cv.setMouseCallback('picture', draw)
cv.waitKey(0)
cv.destroyAllWindows()
root.destroy()
except Exception as e:
print("出现错误:", e)
return "error" # 添加返回错误标记
```
然后在主界面中,可以通过 try/except 语句来捕获错误,并在发生错误时重新执行 start 函数。具体代码修改如下:
```
class Faceshow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Faceshow, self).__init__(parent)
self.setupUi(self)
self.main_button.clicked.connect(self.start_handler)
def start_handler(self):
while True:
result = start() # 调用 start 函数
if result != "error": # 判断是否返回错误标记
break
else:
# 发生错误,重新执行 start 函数
continue
```
注意,这里使用了一个无限循环和 continue 语句来实现重新执行 start 函数的功能。这种方式虽然可以达到目的,但是可能会导致程序陷入死循环,因此需要谨慎使用。如果你有更好的方式来实现这个功能,可以尝试使用。
阅读全文