pyqt5固定打开一个excel文件
时间: 2023-10-07 21:13:26 浏览: 161
Python Pyqt5 自适应UI 导入本地Excel
以下是一个使用PyQt5固定打开一个Excel文件的示例代码:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QMessageBox, QFileDialog
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtChart import QChart, QChartView, QLineSeries, QValueAxis
from openpyxl import load_workbook
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("固定打开 Excel 文件并绘制折线图")
self.setGeometry(100, 100, 800, 600)
# 添加菜单栏
menubar = self.menuBar()
filemenu = menubar.addMenu('文件')
openfile = filemenu.addAction('打开文件')
openfile.triggered.connect(self.openFile)
# 添加工具栏
toolbar = self.addToolBar('工具栏')
toolbar.setMovable(False)
openfile = QAction(QIcon('open.png'), '打开文件', self)
openfile.triggered.connect(self.openFile)
toolbar.addAction(openfile)
# 创建图表
self.chart = QChart()
self.chart.setTitle("折线图")
self.chart.setAnimationOptions(QChart.SeriesAnimations)
# 创建图表视图并设置图表
chartview = QChartView(self.chart, self)
chartview.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(chartview)
# 固定打开文件
self.openExcelFile('data.xlsx')
def openFile(self):
# 弹出文件选择对话框
filename, _ = QFileDialog.getOpenFileName(self, "选择文件", "", "Excel 文件 (*.xlsx)")
if filename:
self.openExcelFile(filename)
def openExcelFile(self, filename):
# 加载 Excel 文件
try:
wb = load_workbook(filename=filename, read_only=True)
except:
QMessageBox.warning(self, "错误", "无法打开文件: %s" % filename, QMessageBox.Ok)
return
sheet = wb.active
# 获取数据
data = []
for row in sheet.iter_rows(min_row=2, values_only=True):
data.append(row)
# 绘制折线图
self.chart.removeAllSeries()
for i in range(1, sheet.max_column):
series = QLineSeries()
series.setName(sheet.cell(row=1, column=i+1).value)
for j in range(len(data)):
series.append(j, data[j][i])
self.chart.addSeries(series)
# 设置 X 轴和 Y 轴
axisx = QValueAxis()
axisx.setRange(0, len(data))
axisx.setLabelFormat("%d")
axisx.setTickCount(len(data))
axisx.setTitleText(sheet.cell(row=1, column=1).value)
axisx.setGridLineVisible(True)
self.chart.addAxis(axisx, Qt.AlignBottom)
for series in self.chart.series():
self.chart.setAxisX(axisx, series)
axisy = QValueAxis()
axisy.setRange(sheet.cell(row=2, column=2).value, sheet.cell(row=sheet.max_row, column=2).value)
axisy.setLabelFormat("%.1f")
axisy.setTickCount(10)
axisy.setTitleText(sheet.cell(row=1, column=2).value)
axisy.setGridLineVisible(True)
self.chart.addAxis(axisy, Qt.AlignLeft)
for series in self.chart.series():
self.chart.setAxisY(axisy, series)
# 更新图表视图
self.chart.legend().setVisible(True)
self.chart.legend().setAlignment(Qt.AlignBottom)
chartview = self.centralWidget()
chartview.setChart(self.chart)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwin = MainWindow()
mainwin.show()
sys.exit(app.exec_())
```
该程序在MainWindow类的构造函数中添加了一个openExcelFile方法,该方法用于固定打开指定的Excel文件。程序还在工具栏中添加了一个“打开文件”按钮,并将其绑定到openFile方法。
当用户点击“打开文件”按钮或选择“打开文件”选项时,程序会弹出文件选择对话框,用户可以选择一个Excel文件。如果用户选择了一个文件,则程序会调用openExcelFile方法打开该文件并绘制折线图。
如果用户未选择文件,程序会默认打开名为“data.xlsx”的文件。如果程序无法打开指定的文件,则会弹出一个警告消息框。
阅读全文