我慢慢得到POO,python和PyQt,我有一个问题需要理解传递参数和属性的东西。
我在网上找到了一个处理QTreeView的代码(见下文),我不明白如何将Index传递给showPath()。另外为什么self.filename和self.filepath不会传递给实例?
我希望我足够清楚......非常感谢。
from PyQt4 import QtGui
class TreeViewWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(TreeViewWidget, self).__init__(parent)
self.model = QtGui.QFileSystemModel(self)
self.model.setRootPath(rootpath)
self.indexRoot = self.model.index(self.model.rootPath())
self.treeView = QtGui.QTreeView(self)
self.treeView.setExpandsOnDoubleClick(False)
self.treeView.setModel(self.model)
self.treeView.setRootIndex(self.indexRoot)
self.treeView.setColumnWidth(0,220)
self.treeView.clicked.connect(self.showPath)
self.treeView.doubleClicked.connect(self.openQuickLook)
self.labelFileName = QtGui.QLabel(self)
self.labelFileName.setText("File Name:")
self.lineEditFileName = QtGui.QLineEdit(self)
self.labelFilePath = QtGui.QLabel(self)
self.labelFilePath.setText("File Path:")
self.lineEditFilePath = QtGui.QLineEdit(self)
self.gridLayout = QtGui.QGridLayout()
self.gridLayout.addWidget(self.labelFileName, 0, 0)
self.gridLayout.addWidget(self.lineEditFileName, 0, 1)
self.gridLayout.addWidget(self.labelFilePath, 1, 0)
self.gridLayout.addWidget(self.lineEditFilePath, 1, 1)
self.layout = QtGui.QVBoxLayout(self)
self.layout.addLayout(self.gridLayout)
self.layout.addWidget(self.treeView)
def givePathName(self, index):
indexItem = self.model.index(index.row(), 0, index.parent())
self.filename = self.model.fileName(indexItem)
self.filepath = self.model.filePath(indexItem)
def showPath(self, index):
self.givePathName(index)
self.lineEditFileName.setText(self.filename)
self.lineEditFilePath.setText(self.filepath)
答案 0 :(得分:2)
我不明白
index
如何传递到showPath()
您可以将小部件的点击信号明确地连接到showPath
:
self.treeView.clicked.connect(self.showPath)
此信号的一部分是点击的特定项目的index
;这会自动作为参数传递给showPath
。
另外为什么
self.filename
和self.filepath
没有传递给实例?
它们是实例属性,它们属于实例,并且可供该实例的所有方法访问。它们是在givePathName()
中创建的,然后是TreeViewWidget
实例对象的一部分。它们以self.
开头,因为按照惯例,它是实例方法中实例的名称(以及这些方法的隐式第一个参数)。
把它们放在一起:
def showPath(self, index):
# ^ the instance object, so you can access its attributes
# ^ the index of the specific item clicked
答案 1 :(得分:1)
QTreeView的clicked
信号将点击的项目的QModelIndex
作为参数传递给任何连接的广告位。