1 ## ==============自定义功能函数======================== 2 def __openByIODevice(self,fileName): ##用QFile打开文件 3 fileDevice=QFile(fileName) 4 # print("**",fileDevice.exists()) 5 # print("@@",fileDevice.open(QIODevice.ReadOnly | QIODevice.Text)) 6 if not fileDevice.exists(): #判断文件是否存在 7 return False 8 if not fileDevice.open(QIODevice.ReadOnly | QIODevice.Text): 9 return False 10 try: 11 self.ui.textEdit.clear() 12 while not fileDevice.atEnd(): 13 qtBytes = fileDevice.readLine() #返回QByteArray类型 14 pyBytes = bytes(qtBytes.data()) #将QByteArray转换为bytes类型 15 lineStr = pyBytes.decode("utf-8") #bytes转换为str类型 16 lineStr = lineStr.strip() #去除结尾增加的空行 17 self.ui.textEdit.appendPlainText(lineStr) 18 finally: 19 fileDevice.close() 20 return True 21 pass 22 23 24 def __saveByIODevice(self,fileName): ##用QFile保存文件 25 fileDevice=QFile(fileName) 26 if not fileDevice.open(QIODevice.WriteOnly | QIODevice.Text): 27 return False 28 try: 29 text=self.ui.textEdit.toPlainText() 30 strBytes=text.encode("utf-8") 31 fileDevice.write(strBytes) 32 finally: 33 fileDevice.close() 34 return True 35 pass 36 37 38 def __openByStream(self,fileName): ##用QTextStream打开文件 39 fileDevice=QFile(fileName) 40 if not fileDevice.exists(): #判断文件是否存在 41 return False 42 if not fileDevice.open(QIODevice.ReadOnly | QIODevice.Text): 43 return False 44 try: 45 fileStream=QTextStream(fileDevice) 46 fileStream.setAutoDetectUnicode(True) #自动检测Unicode 47 fileStream.setCodec("utf-8") 48 self.ui.textEdit.clear() 49 while not fileStream.atEnd(): 50 lineStr=fileStream.readLine() #读取文件的一行读取出来的就是str 51 self.ui.textEdit.appendPlainText(lineStr) #添加到文本框显示 52 finally: 53 fileDevice.close() 54 return True 55 pass 56 57 58 def __saveByStream(self,fileName): ##用 QTextStream 保存文件 59 fileDevice=QFile(fileName) 60 if not fileDevice.open(QIODevice.WriteOnly | QIODevice.Text): 61 return False 62 try: 63 fileStream=QTextStream(fileDevice) 64 fileStream.setAutoDetectUnicode(True) #自动检测Unicode 65 fileStream.setCodec("utf-8") 66 text=self.ui.textEdit.toPlainText() 67 fileStream<<text 68 fileStream<<"\n************在尾部添加的第一行" 69 finally: 70 fileDevice.close() 71 return True 72 pass 73 74 75 ## ==============event处理函数========================== 76 77 78 ## ==========由connectSlotsByName()自动连接的槽函数============ 79 80 @pyqtSlot() ##用QFile 打开文件 81 def on_actQFile_Open_triggered(self): 82 curPath=QDir.currentPath() 83 title="打开一个文件" 84 filt="程序文件(*.h*.cpp*.py);;文本文件(*.txt);;所有文件(*.*)" 85 fileName,flt=QFileDialog.getOpenFileName(self,title,curPath,filt) 86 if fileName == "": 87 return 88 if self.__openByIODevice(fileName): 89 self.ui.statusBar.showMessage(fileName) 90 else: 91 QMessageBox.critical(self,"错误","打开文件失败") 92 pass 93 94 95 @pyqtSlot() ##用QFile 另存文件 96 def on_actQFile_Save_triggered(self): 97 curPath=QDir.currentPath() 98 title="另存为一个文件" 99 filt="Python程序(*.py);;C++程序(*.h*.cpp);;所有文件(*.*)" 100 fileName,flt=QFileDialog.getSaveFileName(self,title,curPath,filt) 101 if fileName == "": 102 return 103 if self.__saveByIODevice(fileName): 104 self.ui.statusBar.showMessage(fileName) 105 else: 106 QMessageBox.critical(self,"错误","保存文件失败") 107 pass 108 109 110 @pyqtSlot() ##用QTextStream 打开文件 111 def on_actStream_Open_triggered(self): 112 curPath=QDir.currentPath() 113 title="打开一个文件" 114 filt="程序文件(*.h*.cpp*.py);;文本文件(*.txt);;所有文件(*.*)" 115 fileName,flt=QFileDialog.getOpenFileName(self,title,curPath,filt) 116 if fileName == "": 117 return 118 if self.__openByStream(fileName): 119 self.ui.statusBar.showMessage(fileName) 120 else: 121 QMessageBox.critical(self,"错误","打开文件失败") 122 pass 123 124 125 @pyqtSlot() ##用QTextStream 另存文件 126 def on_actStream_Save_triggered(self): 127 curPath=QDir.currentPath() 128 title="另存为一个文件" 129 filt="Python程序(*.py);;C++程序(*.h*.cpp);;所有文件(*.*)" 130 fileName,flt=QFileDialog.getSaveFileName(self,title,curPath,filt) 131 if fileName == "": 132 return 133 if self.__saveByStream(fileName): 134 self.ui.statusBar.showMessage(fileName) 135 else: 136 QMessageBox.critical(self,"错误","保存文件失败") 137 pass 138 139 140 @pyqtSlot() ##用 python 的file()打开文件 141 def on_actPY_Open_triggered(self): 142 curPath=QDir.currentPath() 143 title="打开一个文件" 144 filt="程序文件(*.h*.cpp*.py);;文本文件(*.txt);;所有文件(*.*)" 145 fileName,flt=QFileDialog.getOpenFileName(self,title,curPath,filt) 146 if fileName == "": 147 return 148 self.ui.textEdit.clear() 149 fileDevice=open(fileName,mode='r',encoding='utf-8') 150 try: 151 for eachLine in fileDevice: #每次读取一行 152 lineStr = eachLine.strip() 153 self.ui.textEdit.appendPlainText(lineStr) 154 self.ui.statusBar.showMessage(fileName) 155 finally: 156 fileDevice.close() 157 pass 158 159 160 @pyqtSlot() ##用 python的file() 保存文件 161 def on_actPY_Save_triggered(self): 162 curPath=QDir.currentPath() 163 title="另存为一个文件" 164 filt="Python程序(*.py);;C++程序(*.h*.cpp);;所有文件(*.*)" 165 fileName,flt=QFileDialog.getSaveFileName(self,title,curPath,filt) 166 if fileName == "": 167 return 168 text=self.ui.textEdit.toPlainText() #str类型 169 fileDevice=open(fileName,mode='w',encoding='utf-8') 170 try: 171 fileDevice.write(text) 172 self.ui.statusBar.showMessage(fileName) 173 finally: 174 fileDevice.close() 175 pass