python利用pandas与Pyqt5实现读取excel,实现点击第一个下拉框选择某一列所有名称,同时第二个下拉框内容为前一个下拉框包含的名称
时间: 2024-06-11 08:07:17 浏览: 169
python pandas 读取excel数据
以下是一个简单的实现示例,其中使用了pandas和PyQt5:
```python
import pandas as pd
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox
class ExcelViewer(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 读取Excel文件
self.df = pd.read_excel('data.xlsx')
# 创建下拉框
self.combo1 = QComboBox(self)
self.combo2 = QComboBox(self)
# 将第一列的所有名称添加到第一个下拉框
self.combo1.addItems(list(self.df.iloc[:, 0]))
# 监听第一个下拉框的选择事件,更新第二个下拉框的内容
self.combo1.currentIndexChanged.connect(self.updateCombo2)
# 创建一个垂直布局,并将下拉框添加到其中
vbox = QVBoxLayout()
vbox.addWidget(self.combo1)
vbox.addWidget(self.combo2)
# 将布局应用到窗口
self.setLayout(vbox)
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('Excel Viewer')
self.show()
def updateCombo2(self):
# 获取第一个下拉框当前选中的名称
selected_name = self.combo1.currentText()
# 获取包含该名称的所有行
selected_rows = self.df[self.df.iloc[:, 0] == selected_name]
# 获取第二列中包含的所有名称
names = list(selected_rows.iloc[:, 1])
# 更新第二个下拉框的内容
self.combo2.clear()
self.combo2.addItems(names)
if __name__ == '__main__':
app = QApplication([])
ex = ExcelViewer()
app.exec_()
```
在这个示例中,我们创建了一个名为`ExcelViewer`的QWidget子类,它包含两个下拉框。在初始化时,我们读取Excel文件并将第一列的所有名称添加到第一个下拉框。我们还将第一个下拉框的选择事件连接到一个名为`updateCombo2`的函数,该函数将更新第二个下拉框的内容。
在`updateCombo2`函数中,我们首先获取第一个下拉框当前选中的名称,然后获取包含该名称的所有行。我们然后获取第二列中包含的所有名称,并将它们添加到第二个下拉框中。注意,我们使用`combo2.clear()`来清除第二个下拉框的内容,然后使用`combo2.addItems()`将新名称添加到它中。
最后,在`main`函数中,我们创建了一个QApplication实例并显示了ExcelViewer窗口。
阅读全文