PyQT5 QFileDialog文件操作程序崩溃处理
最近用PyQT写个窗体工具,用到QFileDialog处理文件时程序就崩掉了,网上查的降版本,换32位解释器都尝试了都不靠谱,后面无意中看到一段示例代码终于解决了,记录一下,在给掉坑里的小伙伴做个参考。
原代码是用 qt 模板生成的,添加的构造方法:
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QWidget
import os
import time
class Ui_MainWindow(Object):
def __init__(self):
self.zh_CN = {}
self.en_US = {}
self.cwd = os.getcwd()
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(0, 0, 791, 551))
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.lineEdit = QtWidgets.QLineEdit(self.tab)
self.lineEdit.setGeometry(QtCore.QRect(30, 40, 541, 31))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.tab)
self.pushButton.setGeometry(QtCore.QRect(620, 40, 91, 31))
self.pushButton.setObjectName("pushButton")
self.pushButton.clicked.connect(self.openFolder)
self.tabWidget.addTab(self.tab, "")
def openFolder(self):
dir_choose = QFileDialog.getExistingDirectory(self,"选取文件夹",self.cwd)
self.lineEdit.setText(str(dir_choose))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
...
修改后代码:
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QWidget
import os
import time
class Ui_MainWindow(QWidget):
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.zh_CN = {}
self.en_US = {}
self.cwd = os.getcwd()
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(0, 0, 791, 551))
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.lineEdit = QtWidgets.QLineEdit(self.tab)
self.lineEdit.setGeometry(QtCore.QRect(30, 40, 541, 31))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.tab)
self.pushButton.setGeometry(QtCore.QRect(620, 40, 91, 31))
self.pushButton.setObjectName("pushButton_4")
self.pushButton.clicked.connect(self.openFolder)
self.tabWidget.addTab(self.tab, "")
def openFolder(self):
dir_choose = QFileDialog.getExistingDirectory(self,"选取文件夹",self.cwd)
self.lineEdit.setText(str(dir_choose))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)