QTreeView,类,参数,实例和属性

时间:2014-01-23 09:15:42

标签: python class pyqt instance qtreeview

我慢慢得到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)

2 个答案:

答案 0 :(得分:2)

  

我不明白index如何传递到showPath()

您可以将小部件的点击信号明确地连接到showPath

self.treeView.clicked.connect(self.showPath)

此信号的一部分是点击的特定项目的index;这会自动作为参数传递给showPath

  

另外为什么self.filenameself.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作为参数传递给任何连接的广告位。

请参阅Qt DocumentationPyQt signal and slots documentation