用pyqt5写一个弹窗,可以读取文本文件,文本中数据以;进行分割,并在表格进行显示,并提供保存功能
时间: 2023-05-14 08:07:16 浏览: 58
可以使用QFileDialog来打开文本文件,使用QTableWidget来显示数据,并使用QFileDialog来保存数据。以下是一个简单的示例代码:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QFileDialog, QPushButton, QVBoxLayout
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('弹窗')
self.setGeometry(100, 100, 500, 500)
# 创建表格
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(3)
self.tableWidget.setHorizontalHeaderLabels(['列1', '列2', '列3'])
# 创建按钮
self.btnOpen = QPushButton('打开文件')
self.btnSave = QPushButton('保存文件')
# 创建布局
layout = QVBoxLayout()
layout.addWidget(self.tableWidget)
layout.addWidget(self.btnOpen)
layout.addWidget(self.btnSave)
# 设置布局
self.setLayout(layout)
# 绑定事件
self.btnOpen.clicked.connect(self.openFile)
self.btnSave.clicked.connect(self.saveFile)
def openFile(self):
fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '', '文本文件(*.txt)')
if fileName:
with open(fileName, 'r') as f:
lines = f.readlines()
self.tableWidget.setRowCount(len(lines))
for i, line in enumerate(lines):
data = line.strip().split(';')
for j, item in enumerate(data):
self.tableWidget.setItem(i, j, QTableWidgetItem(item))
def saveFile(self):
fileName, _ = QFileDialog.getSaveFileName(self, '保存文件', '', '文本文件(*.txt)')
if fileName:
with open(fileName, 'w') as f:
for i in range(self.tableWidget.rowCount()):
data = []
for j in range(self.tableWidget.columnCount()):
item = self.tableWidget.item(i, j)
if item:
data.append(item.text())
else:
data.append('')
f.write(';'.join(data) + '\n')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
```
这个弹窗可以打开文本文件,读取数据并在表格中显示,也可以保存数据到文本文件中。