Проблема PyQt4 с браузером базы данных xml (treeview, singals и insertplaintext)

#python #qt #qt4 #pyqt4

#python #qt #qt4 #pyqt4

Вопрос:

Я пишу приложение для браузера базы данных с 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 должны принимать одинаковые аргументы. Итак, я должен написать некоторый сигнал, который выполняет СЛОТ, представляющий собой функцию с аргументом QModelIndex, которая находит выбранный файл, создает объект xmldocument и затем распечатывает его словари.
Мои вопросы:

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

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


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 это метод, принимающий один аргумент, и этот аргумент имеет тип, который отправляет clicked signal of self.ui.treeView . Разбирайте if оттуда, как хотите.


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

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


Как я должен получить путь к выбранному файлу из QModelIndex?

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