pyqt5的qtreeview模拟navicat软件的数据库连接打开和关闭
时间: 2024-05-08 08:16:24 浏览: 115
pyqt-proj.zip
以下是一个简单的示例,演示如何使用QTreeView模拟Navicat软件的数据库连接打开和关闭功能:
```python
import sys
from PyQt5.QtWidgets import QApplication, QTreeView, QAbstractItemView, QStandardItemModel, QStandardItem
class MainWindow(QTreeView):
def __init__(self):
super().__init__()
# 设置窗口标题
self.setWindowTitle("Navicat")
# 创建模型
self.model = QStandardItemModel()
self.model.setHorizontalHeaderLabels(['Database', 'Status'])
# 添加根节点
root = QStandardItem('Connections')
root.setEditable(False)
self.model.appendRow(root)
# 添加子节点
self.add_connection('MySQL', True)
self.add_connection('PostgreSQL', False)
# 设置模型
self.setModel(self.model)
# 设置选择模式
self.setSelectionMode(QAbstractItemView.SingleSelection)
# 监听节点点击事件
self.clicked.connect(self.on_clicked)
def add_connection(self, name, status):
"""
添加子节点
"""
item_name = QStandardItem(name)
item_name.setEditable(False)
item_status = QStandardItem('Connected' if status else 'Disconnected')
item_status.setEditable(False)
item_name.appendRow([item_status])
self.model.itemFromIndex(self.model.indexFromItem(self.model.invisibleRootItem())).appendRow(item_name)
def on_clicked(self, index):
"""
处理节点点击事件
"""
item = self.model.itemFromIndex(index)
if not item.isEditable():
# 根节点或子节点的状态列被点击
return
# 切换状态
status = item.text() == 'Connected'
item.setText('Connected' if not status else 'Disconnected')
# 更新子节点的状态
for i in range(item.rowCount()):
child = item.child(i)
child.setText('Connected' if not status else 'Disconnected')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
这个示例创建了一个带有两个子节点的根节点,每个子节点都有一个状态列,表示连接的状态。当单击子节点的状态列时,它将切换状态,并更新子节点的状态。
阅读全文