Pyqt怎么将列表数据加入窗口中
时间: 2023-06-16 13:05:43 浏览: 90
PyQt中可以使用QListWidget来显示列表数据。下面是一个简单的例子:
```python
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem, QWidget, QVBoxLayout
app = QApplication([])
# 创建一个窗口
window = QWidget()
# 创建一个QListWidget
list_widget = QListWidget()
# 创建一些数据项
items = ['Item 1', 'Item 2', 'Item 3']
# 将数据项添加到QListWidget中
for item in items:
list_item = QListWidgetItem(item)
list_widget.addItem(list_item)
# 创建一个垂直布局
layout = QVBoxLayout()
layout.addWidget(list_widget)
# 将布局设置给窗口
window.setLayout(layout)
# 显示窗口
window.show()
# 运行应用程序
app.exec_()
```
在上面的例子中,我们首先创建了一个QListWidget,然后将数据项添加到其中。最后,我们将QListWidget添加到一个垂直布局中,并将布局设置给窗口。运行这个程序,你会看到一个带有列表数据的窗口。
相关问题
用python中的PyQt库编写一个教务系统,读取数据并通过加入组件能够对学生成绩数据进行添加、删除、修改、查询
好的,为了实现这个教务系统,我们可以使用Python的PyQt库来创建用户界面,使用文件来存储学生成绩数据。下面是一个简单的实现示例:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QMessageBox, QListWidget
import sys
import json
# 读取学生成绩数据
def read_student_data():
try:
with open('students.json', 'r') as f:
students = json.load(f)
except FileNotFoundError:
students = {}
return students
# 保存学生成绩数据
def save_student_data(students):
with open('students.json', 'w') as f:
json.dump(students, f)
# 添加学生的成绩数据
def add_student(name, grades):
students = read_student_data()
if name not in students:
students[name] = grades
save_student_data(students)
return f"学生{name}的成绩已添加"
else:
return f"学生{name}的成绩已存在,无法重复添加"
# 删除学生的成绩数据
def delete_student(name):
students = read_student_data()
if name in students:
del students[name]
save_student_data(students)
return f"学生{name}的成绩已删除"
else:
return f"学生{name}的成绩不存在,无法删除"
# 修改学生的成绩数据
def modify_student(name, grades):
students = read_student_data()
if name in students:
students[name] = grades
save_student_data(students)
return f"学生{name}的成绩已修改"
else:
return f"学生{name}的成绩不存在,无法修改"
# 查询学生的成绩数据
def query_student(name):
students = read_student_data()
if name in students:
return f"学生{name}的成绩为{students[name]}"
else:
return f"学生{name}的成绩不存在"
class StudentManager(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 学生姓名标签
self.nameLabel = QLabel("学生姓名:", self)
self.nameLabel.move(20, 20)
# 学生姓名输入框
self.nameLineEdit = QLineEdit(self)
self.nameLineEdit.move(120, 20)
# 学生成绩标签
self.gradesLabel = QLabel("学生成绩:", self)
self.gradesLabel.move(20, 60)
# 学生成绩输入框
self.gradesLineEdit = QLineEdit(self)
self.gradesLineEdit.move(120, 60)
# 添加学生按钮
self.addButton = QPushButton("添加", self)
self.addButton.move(20, 100)
self.addButton.clicked.connect(self.add_student)
# 删除学生按钮
self.deleteButton = QPushButton("删除", self)
self.deleteButton.move(100, 100)
self.deleteButton.clicked.connect(self.delete_student)
# 修改学生按钮
self.modifyButton = QPushButton("修改", self)
self.modifyButton.move(180, 100)
self.modifyButton.clicked.connect(self.modify_student)
# 查询学生按钮
self.queryButton = QPushButton("查询", self)
self.queryButton.move(260, 100)
self.queryButton.clicked.connect(self.query_student)
# 学生列表
self.studentList = QListWidget(self)
self.studentList.move(20, 140)
self.studentList.resize(300, 200)
self.setGeometry(300, 300, 350, 400)
self.setWindowTitle('学生成绩管理系统')
self.show()
# 添加学生
def add_student(self):
name = self.nameLineEdit.text()
grades = self.gradesLineEdit.text().split(',')
ret = add_student(name, grades)
QMessageBox.information(self, "提示", ret)
self.nameLineEdit.setText("")
self.gradesLineEdit.setText("")
self.show_student_list()
# 删除学生
def delete_student(self):
name = self.nameLineEdit.text()
ret = delete_student(name)
QMessageBox.information(self, "提示", ret)
self.nameLineEdit.setText("")
self.gradesLineEdit.setText("")
self.show_student_list()
# 修改学生
def modify_student(self):
name = self.nameLineEdit.text()
grades = self.gradesLineEdit.text().split(',')
ret = modify_student(name, grades)
QMessageBox.information(self, "提示", ret)
self.nameLineEdit.setText("")
self.gradesLineEdit.setText("")
self.show_student_list()
# 查询学生
def query_student(self):
name = self.nameLineEdit.text()
ret = query_student(name)
QMessageBox.information(self, "提示", ret)
self.nameLineEdit.setText("")
self.gradesLineEdit.setText("")
# 显示学生列表
def show_student_list(self):
self.studentList.clear()
students = read_student_data()
for name, grades in students.items():
self.studentList.addItem(f"{name}: {grades}")
if __name__ == '__main__':
app = QApplication(sys.argv)
sm = StudentManager()
sm.show_student_list()
sys.exit(app.exec_())
```
在上面的代码中,我们使用PyQt库创建了一个简单的用户界面,包括学生姓名输入框、学生成绩输入框、添加按钮、删除按钮、修改按钮、查询按钮和学生列表。我们使用JSON文件来存储学生成绩数据,并使用Python的json库来读取和保存数据。当用户在学生姓名输入框和学生成绩输入框中输入数据并点击添加、删除、修改或查询按钮时,我们调用相应的函数来执行相应的操作,并使用QMessageBox来显示操作结果。我们还定义了一个函数来显示学生列表,该函数在窗口启动时自动调用,以显示所有学生的成绩数据。
用python中的PyQt库编写一个教务系统,读取excel表导入原始数据并通过加入组件能够对学生成绩数据进行添加、删除、修改、查询
好的,这是一个比较复杂的需求,需要用到PyQt的各种组件和功能,让我们一步步来实现它。
首先,我们需要读取Excel表中的原始数据,可以使用Python中的openpyxl库来实现。代码如下:
```python
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('学生成绩.xlsx')
# 选择工作表
ws = wb.active
# 遍历工作表中的数据
for row in ws.iter_rows(values_only=True):
print(row)
```
接下来,我们需要创建一个PyQt的窗口,并添加组件,如下:
```python
from PyQt5 import QtWidgets, QtCore, QtGui
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# 设置窗口标题和大小
self.setWindowTitle('教务系统')
self.resize(800, 600)
# 添加表格组件
self.table = QtWidgets.QTableWidget(self)
self.table.setGeometry(QtCore.QRect(10, 10, 780, 480))
self.table.setColumnCount(4)
self.table.setHorizontalHeaderLabels(['学号', '姓名', '成绩', '备注'])
# 添加按钮组件
self.add_btn = QtWidgets.QPushButton('添加', self)
self.add_btn.setGeometry(QtCore.QRect(100, 520, 80, 30))
self.del_btn = QtWidgets.QPushButton('删除', self)
self.del_btn.setGeometry(QtCore.QRect(200, 520, 80, 30))
self.edit_btn = QtWidgets.QPushButton('修改', self)
self.edit_btn.setGeometry(QtCore.QRect(300, 520, 80, 30))
self.query_btn = QtWidgets.QPushButton('查询', self)
self.query_btn.setGeometry(QtCore.QRect(400, 520, 80, 30))
# 绑定按钮事件
self.add_btn.clicked.connect(self.add_data)
self.del_btn.clicked.connect(self.del_data)
self.edit_btn.clicked.connect(self.edit_data)
self.query_btn.clicked.connect(self.query_data)
# 添加数据
def add_data(self):
pass
# 删除数据
def del_data(self):
pass
# 修改数据
def edit_data(self):
pass
# 查询数据
def query_data(self):
pass
```
在窗口中添加了一个表格组件和四个按钮组件,并分别绑定了添加、删除、修改、查询四个事件。但是这些事件的具体实现还没有写,在接下来的代码中我们会完成它们。
接下来,我们需要在添加数据的事件中,读取Excel表中的数据,并将其添加到表格中。代码如下:
```python
# 添加数据
def add_data(self):
# 创建一个文件对话框,选择Excel文件
file_dialog = QtWidgets.QFileDialog(self)
file_dialog.setNameFilter('Excel文件(*.xlsx)')
if file_dialog.exec_():
file_name = file_dialog.selectedFiles()[0]
# 打开Excel文件
wb = openpyxl.load_workbook(file_name)
# 选择工作表
ws = wb.active
# 遍历工作表中的数据,将其添加到表格中
for row_num, row in enumerate(ws.iter_rows(values_only=True)):
self.table.insertRow(row_num)
for col_num, cell_value in enumerate(row):
cell = QtWidgets.QTableWidgetItem(str(cell_value))
self.table.setItem(row_num, col_num, cell)
```
在这个事件中,我们首先创建了一个文件对话框,让用户选择Excel文件。然后打开Excel文件,遍历工作表中的数据,并将其添加到表格中。
接下来,我们需要在删除数据的事件中,删除选中的行数据。代码如下:
```python
# 删除数据
def del_data(self):
# 获取选中的行
selected_rows = self.table.selectionModel().selectedRows()
# 遍历选中的行,删除对应的数据
for row in selected_rows:
row_index = row.row()
self.table.removeRow(row_index)
```
在这个事件中,我们首先获取选中的行,然后遍历选中的行,删除对应的数据。
接下来,我们需要在修改数据的事件中,修改选中的行数据。代码如下:
```python
# 修改数据
def edit_data(self):
# 获取选中的行
selected_rows = self.table.selectionModel().selectedRows()
# 如果选中了多行,则只修改第一行数据
if len(selected_rows) > 0:
row_index = selected_rows[0].row()
row = []
for col_index in range(self.table.columnCount()):
cell_value = self.table.item(row_index, col_index).text()
row.append(cell_value)
# 创建一个对话框,让用户修改数据
dialog = QtWidgets.QDialog(self)
dialog.setWindowTitle('修改数据')
dialog.resize(300, 200)
layout = QtWidgets.QVBoxLayout(dialog)
label1 = QtWidgets.QLabel('学号', dialog)
edit1 = QtWidgets.QLineEdit(row[0], dialog)
layout.addWidget(label1)
layout.addWidget(edit1)
label2 = QtWidgets.QLabel('姓名', dialog)
edit2 = QtWidgets.QLineEdit(row[1], dialog)
layout.addWidget(label2)
layout.addWidget(edit2)
label3 = QtWidgets.QLabel('成绩', dialog)
edit3 = QtWidgets.QLineEdit(row[2], dialog)
layout.addWidget(label3)
layout.addWidget(edit3)
label4 = QtWidgets.QLabel('备注', dialog)
edit4 = QtWidgets.QLineEdit(row[3], dialog)
layout.addWidget(label4)
layout.addWidget(edit4)
ok_btn = QtWidgets.QPushButton('确定', dialog)
ok_btn.clicked.connect(lambda: self.update_data(row_index, edit1.text(), edit2.text(), edit3.text(), edit4.text()))
layout.addWidget(ok_btn)
dialog.exec_()
# 更新数据
def update_data(self, row_index, cell1, cell2, cell3, cell4):
self.table.setItem(row_index, 0, QtWidgets.QTableWidgetItem(cell1))
self.table.setItem(row_index, 1, QtWidgets.QTableWidgetItem(cell2))
self.table.setItem(row_index, 2, QtWidgets.QTableWidgetItem(cell3))
self.table.setItem(row_index, 3, QtWidgets.QTableWidgetItem(cell4))
```
在这个事件中,我们首先获取选中的行,然后从选中的行中获取数据,并创建一个对话框,让用户修改数据。在用户点击确定按钮后,我们调用update_data函数更新数据。
最后,我们需要在查询数据的事件中,根据用户输入的条件查询数据,并显示在表格中。代码如下:
```python
# 查询数据
def query_data(self):
# 创建一个对话框,让用户输入查询条件
dialog = QtWidgets.QDialog(self)
dialog.setWindowTitle('查询数据')
dialog.resize(300, 200)
layout = QtWidgets.QVBoxLayout(dialog)
label1 = QtWidgets.QLabel('学号', dialog)
edit1 = QtWidgets.QLineEdit(dialog)
layout.addWidget(label1)
layout.addWidget(edit1)
label2 = QtWidgets.QLabel('姓名', dialog)
edit2 = QtWidgets.QLineEdit(dialog)
layout.addWidget(label2)
layout.addWidget(edit2)
ok_btn = QtWidgets.QPushButton('确定', dialog)
ok_btn.clicked.connect(lambda: self.do_query(edit1.text(), edit2.text()))
layout.addWidget(ok_btn)
dialog.exec_()
# 执行查询
def do_query(self, student_id, name):
# 遍历表格中的数据,根据条件查询数据
for row_num in range(self.table.rowCount()):
student_id_cell = self.table.item(row_num, 0)
name_cell = self.table.item(row_num, 1)
if student_id and student_id != student_id_cell.text():
self.table.setRowHidden(row_num, True)
elif name and name != name_cell.text():
self.table.setRowHidden(row_num, True)
else:
self.table.setRowHidden(row_num, False)
```
在这个事件中,我们首先创建一个对话框,让用户输入查询条件。在用户点击确定按钮后,我们遍历表格中的数据,根据条件查询数据,并将符合条件的行显示出来,不符合条件的行隐藏起来。
到这里,我们就完成了教务系统的开发。完整的代码如下:
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)