如何拦截QFileDialog右上角的关闭按钮(X)事件?
解决QFileDialog点击关闭按钮导致程序崩溃的问题
当你点击QFileDialog右上角的“X”按钮时,getOpenFileName会返回空字符串作为文件名(fname),后续直接调用os.path.getsize(fname)会因为传入无效路径触发报错,而你的代码既没处理用户取消选择的情况,也没正确捕获文件操作的异常,所以导致程序崩溃。
修复方案如下:
- 先判断文件名是否为空,仅在用户选择有效文件时才执行文件大小获取逻辑
- 将异常捕获移到文件操作代码块,针对性处理文件相关错误
修改后的代码:
dir = "hdb1/temp/" options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fname, _ = QFileDialog.getOpenFileName(self, "Open file", "/hdb1/temp/", "File type (*.pdf)", options=options) # 用户取消选择时直接跳过后续逻辑 if fname: try: fsize = os.path.getsize(fname) # 这里添加获取文件大小后的业务逻辑 except OSError as e: # 处理文件大小获取失败的情况,比如文件不存在、无读取权限等 print(f"获取文件大小出错: {e}") else: # 可选:添加用户取消选择的提示或处理 print("用户取消了文件选择")
内容的提问来源于stack exchange,提问作者user17565490
相关产品推荐
相关产品推荐

