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

1

Я пишу приложение для браузера базы данных с 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 и затем распечатывает его словари.
Мои вопросы:

  1. Как создать такую ​​функцию, которая называется 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'


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

  1. Как мне получить путь к кликному файлу из QModelIndex?
Теги:
pyqt4
qt
qt4

1 ответ

0
Лучший ответ

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

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

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


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

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


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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню