用pside2和sqlite制作一个界面,界面里有一个表格控件,表格中有三行信息,分别是三个人的不同信息,每一行都有一个复选框checkbox,界面里有一个搜索按钮和一个输出按钮,点击搜索找到需要的内容并勾选复选框,最后点击输出按钮即可打印该项目中的数据信息
时间: 2024-02-13 21:05:49 浏览: 131
好的,这是一个比较明确的需求,以下是一个简单的示例代码:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QPushButton, QVBoxLayout, QHBoxLayout, QLineEdit, QLabel, QMessageBox
from PyQt5.QtCore import Qt
import sqlite3
class Example(QWidget):
def __init__(self):
super().__init__()
# 初始化界面
self.initUI()
# 初始化数据库
self.initDB()
# 加载数据
self.loadData()
def initUI(self):
# 设置界面标题和大小
self.setWindowTitle('搜索和输出')
self.resize(500, 300)
# 创建表格控件
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(4)
self.tableWidget.setHorizontalHeaderLabels(['姓名', '性别', '年龄', '复选框'])
self.tableWidget.horizontalHeader().setStretchLastSection(True)
# 创建搜索按钮和输出按钮
self.searchButton = QPushButton('搜索')
self.outputButton = QPushButton('输出')
# 创建搜索框和提示标签
self.searchEdit = QLineEdit()
self.searchLabel = QLabel('搜索姓名:')
self.searchLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
# 创建布局
searchLayout = QHBoxLayout()
searchLayout.addWidget(self.searchLabel)
searchLayout.addWidget(self.searchEdit)
buttonLayout = QHBoxLayout()
buttonLayout.addWidget(self.searchButton)
buttonLayout.addWidget(self.outputButton)
mainLayout = QVBoxLayout()
mainLayout.addLayout(searchLayout)
mainLayout.addWidget(self.tableWidget)
mainLayout.addLayout(buttonLayout)
# 设置主布局
self.setLayout(mainLayout)
# 绑定按钮点击事件
self.searchButton.clicked.connect(self.searchData)
self.outputButton.clicked.connect(self.outputData)
def initDB(self):
# 初始化数据库连接
self.conn = sqlite3.connect('example.db')
self.cursor = self.conn.cursor()
# 创建表格
self.cursor.execute("CREATE TABLE IF NOT EXISTS person (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, sex TEXT, age INTEGER)")
# 插入数据
self.cursor.execute("INSERT INTO person (name, sex, age) VALUES ('张三', '男', 20)")
self.cursor.execute("INSERT INTO person (name, sex, age) VALUES ('李四', '女', 22)")
self.cursor.execute("INSERT INTO person (name, sex, age) VALUES ('王五', '男', 24)")
# 提交更改
self.conn.commit()
def loadData(self):
# 查询数据
self.cursor.execute("SELECT * FROM person")
rows = self.cursor.fetchall()
# 加载数据到表格控件
self.tableWidget.setRowCount(len(rows))
for i, row in enumerate(rows):
nameItem = QTableWidgetItem(row[1])
sexItem = QTableWidgetItem(row[2])
ageItem = QTableWidgetItem(str(row[3]))
checkboxItem = QTableWidgetItem()
checkboxItem.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
checkboxItem.setCheckState(Qt.Unchecked)
self.tableWidget.setItem(i, 0, nameItem)
self.tableWidget.setItem(i, 1, sexItem)
self.tableWidget.setItem(i, 2, ageItem)
self.tableWidget.setItem(i, 3, checkboxItem)
def searchData(self):
# 获取搜索关键字
keyword = self.searchEdit.text()
if keyword:
# 查询数据
self.cursor.execute(f"SELECT * FROM person WHERE name LIKE '%{keyword}%'")
rows = self.cursor.fetchall()
# 加载数据到表格控件
self.tableWidget.setRowCount(len(rows))
for i, row in enumerate(rows):
nameItem = QTableWidgetItem(row[1])
sexItem = QTableWidgetItem(row[2])
ageItem = QTableWidgetItem(str(row[3]))
checkboxItem = QTableWidgetItem()
checkboxItem.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
checkboxItem.setCheckState(Qt.Unchecked)
self.tableWidget.setItem(i, 0, nameItem)
self.tableWidget.setItem(i, 1, sexItem)
self.tableWidget.setItem(i, 2, ageItem)
self.tableWidget.setItem(i, 3, checkboxItem)
else:
# 如果搜索关键字为空,则重新加载全部数据
self.loadData()
def outputData(self):
# 遍历表格控件,输出勾选的数据信息
outputRows = []
for i in range(self.tableWidget.rowCount()):
checkboxItem = self.tableWidget.item(i, 3)
if checkboxItem.checkState() == Qt.Checked:
nameItem = self.tableWidget.item(i, 0)
sexItem = self.tableWidget.item(i, 1)
ageItem = self.tableWidget.item(i, 2)
outputRows.append((nameItem.text(), sexItem.text(), ageItem.text()))
# 如果没有勾选任何数据,则弹出提示框
if not outputRows:
QMessageBox.warning(self, '提示', '请勾选需要输出的数据!')
return
# 输出数据信息
with open('output.txt', 'w') as f:
for row in outputRows:
f.write(f"{row[0]},{row[1]},{row[2]}\n")
QMessageBox.information(self, '提示', '输出成功!')
if __name__ == '__main__':
app = QApplication([])
ex = Example()
ex.show()
app.exec_()
```
这个示例代码使用了 PyQt5 和 sqlite3 两个库,实现了一个带表格控件、搜索框、搜索按钮、输出按钮的界面。其中,表格控件中的数据是从 sqlite 数据库中加载的,可以根据搜索框中输入的姓名进行搜索,搜索结果会实时更新到表格控件中。用户可以勾选表格控件中的复选框,最后点击输出按钮可以将勾选的数据信息输出到文件中。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)