Я пишу приложение для браузера базы данных с PyQt4 и потому что я новичок в Qt, у меня есть некоторые проблемы. У меня есть большинство функций, уже написанных на python, но знаю, что я пытаюсь реализовать их с помощью графического интерфейса PyQt4.
В первую очередь мое приложение теперь выглядит следующим образом:
Browser
В этих каталогах у меня есть 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, который является функцией с аргументом QModelIndex, который находит файл с щелчком, создает объект xmldocument и затем распечатывает его словари.
Мои вопросы:
Поскольку внутри 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'
И еще один вопрос:
Рассмотрим использование механизма соединения нового стиля, предоставляемого PyQt:
self.ui.treeView.clicked.connect(self.ui.plainTextEdit.paste)
Теперь paste
- это метод, принимающий единственный аргумент, и этот аргумент имеет тип, который посылает clicked
сигнал self.ui.treeView
. Рассекайтесь, если оттуда, как хотите.
Как создать такую функцию, которая называется SLOT?
Это другая ошибка. Вы подключаетесь к self.ui.test()
, но это вызов функции, а не функция. Удалите ()
после test
. Но еще лучше, используйте механизм соединения нового типа, как описано выше.
Как мне получить путь к кликуемому файлу из QModelIndex?
Возможно, вызывая его метод data
. Прочитайте doc для QModelIndex