#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