Проблема PyQt4 с браузером баз данных xml (древовидная структура, singals и insertplaintext) - PullRequest
1 голос
/ 23 апреля 2011

Я пишу приложение для браузера базы данных с PyQt4 и, поскольку я новичок в Qt, у меня есть некоторые проблемы. У меня уже есть большинство функций, написанных на python, но я знаю, что пытаюсь реализовать их с помощью PyQt4 GUI.

Прежде всего, мое приложение теперь выглядит так:
Браузер
В этих каталогах у меня есть 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 и затем распечатывает его словари.
Мои вопросы:


Поскольку внутри файла пользовательского интерфейса я создал функцию:

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:<br> QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'<br> QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'<br> QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 2 has unexpected type 'str'

И еще один вопрос:

1 Ответ

0 голосов
/ 23 апреля 2011

Рассмотрите возможность использования механизма подключения нового стиля, предоставляемого PyQt:

self.ui.treeView.clicked.connect(self.ui.plainTextEdit.paste)

Теперь paste - это метод, принимающий единственный аргумент, и этот аргумент имеет тип сигнала clickedself.ui.treeView отправляет.Если оттуда, откажитесь, если хотите.


Как я могу создать такую ​​функцию, которая вызывается как SLOT?

Это другая ошибка.Вы подключаетесь к self.ui.test(), но это вызов функции , а не функция.Удалите () после test.Но, что еще лучше, используйте механизм подключения нового стиля, как описано выше.


Как мне получить путь к нажатому файлу из QModelIndex?

Возможно, вызвавего data метод.Прочитайте документ для QModelIndex

...