在PyQt6项目中如何配置QFileDialog实现仅打开txt格式文件
问题修正点
- 在setupUi方法中添加主窗口实例的存储,解决QFileDialog父对象传入类型错误问题
- 修正QFileDialog调用逻辑,使用
getOpenFileName方法获取用户选中的文件路径 - 修正实例方法调用错误,调用类内方法必须加
self.前缀 - 新增文件读取逻辑,选中txt文件后自动将内容填充到文本编辑框中
- 删除冗余的tkinter导入
完整可运行代码
import sys from PyQt6 import QtCore, QtGui, QtWidgets from PyQt6.QtWidgets import QDialog, QApplication, QFileDialog def Encrypt(SourceText): print(SourceText) class Ui_MainWindow(object): def setupUi(self, MainWindow): # 存储主窗口实例,供后续文件对话框调用 self.main_window = MainWindow MainWindow.setObjectName("MainWindow") MainWindow.resize(886, 487) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.Enter = QtWidgets.QPushButton(self.centralwidget) self.Enter.clicked.connect(self.clicked) self.Enter.setObjectName("Enter") self.gridLayout.addWidget(self.Enter, 2, 0, 1, 1) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft) self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 0, 0, 1, 1) self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget) self.plainTextEdit.setObjectName("plainTextEdit") self.gridLayout.addWidget(self.plainTextEdit, 1, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 886, 20)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.actionUpload = QtGui.QAction(MainWindow) self.actionUpload.setShortcutContext( QtCore.Qt.ShortcutContext.WindowShortcut) self.actionUpload.setMenuRole(QtGui.QAction.MenuRole.AboutQtRole) self.actionUpload.setObjectName("actionUpload") self.menuFile.addAction(self.actionUpload) self.menubar.addAction(self.menuFile.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.actionUpload.triggered.connect(lambda: self.Open("File Uploaded")) def clicked(self): Encrypt(self.plainTextEdit.toPlainText()) def openFileDialog(self): # 获取选中的txt文件路径,_为选中的过滤器值直接忽略 fname, _ = QFileDialog.getOpenFileName(self.main_window, 'Source Text', '', 'txt(*.txt)') if fname: # 过滤用户取消选择的情况 # 如需要全局使用文件路径可存为实例属性:self.fname = fname # 读取文件内容填充到文本编辑框 with open(fname, 'r', encoding='utf-8') as f: file_content = f.read() self.plainTextEdit.setPlainText(file_content) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.Enter.setText(_translate("MainWindow", "Enter")) self.label.setText(_translate( "MainWindow", "Enter Text Below Or Upload File")) self.menuFile.setTitle(_translate("MainWindow", "File")) self.actionUpload.setText(_translate("MainWindow", "Upload")) self.actionUpload.setShortcut(_translate("MainWindow","Ctrl+O")) def Open(self, text): # 调用类内方法必须加self前缀 self.openFileDialog() print(text) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec())
内容的提问来源于stack exchange,提问作者Derek Neilson
相关产品推荐
相关产品推荐

