pyqt5中使用QSqlTableModel模型将一张mysql数据库表格显示在Qtableview中,显示后的表格内容不居中,写一段代码,使得通过setDisplayRole()和setData显露Role()设置实现每一列数据居中显示
时间: 2025-01-01 17:38:54 浏览: 11
在PyQt5中,你可以使用`QSqlTableModel`配合`QTableView`来展示MySQL数据库的数据,并通过`setHorizontalHeaderFormat()`和`setFont()`函数来实现列头和内容的居中对齐。以下是一个简单的示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QSqlTableModel
from PyQt5.QtCore import Qt
class DatabaseDisplay(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
# 创建QSqlTableModel
db = QSqlDatabase.addDatabase('QMYSQL') # 使用'QMYSQL'适配器,替换为你的实际数据库驱动
db.setHostName('localhost') # 数据库主机名
db.setDatabaseName('your_database_name') # 数据库名称
db.setUserName('username') # 用户名
db.setPassword('password') # 密码
if not db.open():
print(f"Error: {db.lastError().text()}")
model = QSqlTableModel(self)
model.setTable('your_table_name') # 表格名
model.select()
# 设置表头样式并居中
header = model.horizontalHeader()
header.setDefaultAlignment(Qt.AlignCenter)
# 将模型绑定到QTableView
view = QTableView(self)
view.setModel(model)
# 设置数据显示规则,让内容居中
for i in range(model.columnCount()):
role = model.dataRole(i)
fmt = 'F' if role == Qt.DisplayRole else ''
view.setItemDelegateForColumn(i, QStyledItemDelegate(self))
view.setItemDelegateForColumn(i).setDisplayFormat(fmt)
self.setCentralWidget(view)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = DatabaseDisplay()
sys.exit(app.exec_())
```
在这个例子中,你需要将 `'localhost'`, `'your_database_name'`, `'username'`, `'password'`, `'your_table_name'` 替换成实际的数据库连接信息。
运行这个程序后,你应该能看到从指定数据库表格中加载的内容,列头和内容都应该是居中的。
阅读全文