PyQt4 XML数据库浏览器问题(树视图、信号和插入文本)
我正在用PyQt4写一个数据库浏览器应用,因为我对Qt还不太熟悉,所以遇到了一些问题。我大部分功能已经用Python写好了,现在想把它们用PyQt4的图形界面实现。
首先,我的应用现在看起来是这样的:
浏览器
在这些目录里,我有一些xml文件,我想解析它们。我写了类似这样的代码:
QtCore.QObject.connect(self.ui.treeView, QtCore.SIGNAL("clicked(QModelIndex)"), self.ui.plainTextEdit, QtCore.SLOT("paste()"))
这个是可以工作的。但是当我尝试做这样的事情时:
QtCore.QObject.connect(self.ui.treeView, QtCore.SIGNAL("clicked(QModelIndex)"), self.ui.plainTextEdit, QtCore.SLOT("insertPlainText('test')"))
就失败了。看了手册后,我知道SIGNAL和SLOT必须接受相同的参数。所以我应该写一个信号,它执行一个SLOT,这个SLOT是一个带有QModelIndex参数的函数,用来找到被点击的文件,创建一个xmldocument对象,然后打印出它的字典。
我的问题是:
- 我该如何创建一个可以作为SLOT调用的函数?
因为在ui文件里我创建了一个函数:
def test(self):
print "Debug"
当我尝试调用它时QtCore.QObject.connect(self.ui.treeView, QtCore.SIGNAL("clicked(QModelIndex)"), self.ui.test())
我遇到了这个错误:
TypeError: arguments did not match any overloaded call:
QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 2 has unexpected type 'str'
还有另一个问题:
- 我该如何从QModelIndex获取被点击文件的路径?
1 个回答
考虑使用PyQt提供的新连接方式:
self.ui.treeView.clicked.connect(self.ui.plainTextEdit.paste)
现在,paste
是一个只接受一个参数的方法,这个参数是self.ui.treeView
的clicked
信号发送的类型。你可以根据需要进行详细分析。
我该如何创建一个可以作为槽函数调用的函数?
这是一个不同的错误。你连接的是self.ui.test()
,但这实际上是一个函数调用,而不是一个函数。把test
后面的()
去掉。更好的做法是使用上面提到的新连接方式。
我应该如何从QModelIndex获取点击文件的路径?
可能通过调用它的data
方法来实现。可以查看QModelIndex的文档。