jac*_*r09 1 python qt4 pyqt pyqt4
我试图从树视图中获取字符串/对象。因此,当用户单击树视图中的任何项目时,我可以在终端上显示它。任何帮助表示赞赏。这是代码。当我单击树视图中的字符串/项目时,它会显示: PyQt4.QtCore.QModelIndex object at 0xb6b6c7d4 而不是 Linux
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtCore, QtGui
data = root = [
("Linux", [
("System",
[("System name",[]),
("Kernel", []),
("Drivers", []),
("Memory", []),
("Processes", []),
("Disk mounted", []),
("Services Running", []),
("Installed Packages", [])]),
#[("System name", [])]),
("Network",
[("Nework confi.",[]),
("Interface test", [])]),
("PCI Devices",
[("PCI devices", [])]),
("Logs",
[("Messages",[]),
("Dmesg", [])]),
])]
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
self.treeView = QTreeView()
self.model = QStandardItemModel()
self.addItems(self.model, data)
self.treeView.setModel(self.model)
self.model.setHorizontalHeaderLabels([self.tr("Object")])
layout = QVBoxLayout()
layout.addWidget(self.treeView)
self.setLayout(layout)
self.treeView.connect(self.treeView, QtCore.SIGNAL('clicked(QModelIndex)'), self.treefunction)
def treefunction(self, index):
print index
def addItems(self, parent, elements):
for text, children in elements:
item = QStandardItem(text)
parent.appendRow(item)
if children:
self.addItems(item, children)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
轻松修复。您的信号返回 QModelIndex,但您需要使用itemFromIndex在模型中查找该索引的项目:
def treefunction(self, index):
print index.model().itemFromIndex(index).text()
# print self.model.itemFromIndex(index).text()
Run Code Online (Sandbox Code Playgroud)
您可以将模型从索引中删除,也可以专门使用您的模型属性。
当我登上领奖台时,我想提一下连接信号和插槽的非常棒的新型方法,只要您使用 Qt 4.5+
self.treeView.clicked.connect(self.treefunction)
Run Code Online (Sandbox Code Playgroud)
请注意您不必再指定基于字符串的签名。它完全是对象样式,您可以直接访问信号对象并告诉它要连接的可调用槽。
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |