#python #qt #qt4 #pyqt #pyqt4
#python #qt #qt4 #pyqt #pyqt4
Вопрос:
Я пытаюсь использовать следующее, чтобы добавить опцию в пользовательское контекстное меню, вызываемое правой кнопкой мыши, в окне редактирования текста QsciScintilla:
fileMenu.addAction(self.ui.textEdit_one.tr("amp;Get"), self, self.addToConfig)
где addToConfig — это метод или «слот» для моего приложения.
FileMenu ожидает следующий формат:
QAction QMenu.addAction (self, QString text, QObject receiver, SLOT()SLOT() member, QKeySequence shortcut = 0)
Я пробовал использовать множество комбинаций QtCore.SLOT(‘self.addToConfig()’), но, похоже, не удается получить правильный формат.
Я продолжаю получать вариации:
QMenu.addAction(QString, QObject, SLOT(), QKeySequence shortcut=0): argument 3 has unexpected type 'instancemethod'
или
Object::connect: No such slot StartQT4::addToConfig()
Object::connect: (receiver name: 'EditorWindow')
Ответ №1:
Вы пытаетесь смешать сигналы / слоты старого стиля с сигналами / слотами нового стиля. Для соединений в старом стиле вы бы передали объект ( self
) в качестве одного параметра, а следующим, в вашем случае, было бы SLOT('addToConfig(<arg types...>)')
.
Однако вам следует просто использовать соединения в новом стиле, что означает простой вызов fileMenu.addAction(self.ui.textEdit_one.tr("amp;Get"), self.addToConfig)
, см.: http://pyqt.sourceforge.net/Docs/PyQt4/qmenu.html#addAction-5
Комментарии:
1. Я не думаю, что правильно понял поле «приемник». QAction QMenu.addAction (self, QString text, вызываемый приемник, QKeySequence shortcut = 0) отлично сработало, спасибо!
2. Да, в исходной подписи, которую вы пробовали, она искала приемник типа
QObject
(он же объект, а не метод), где в качестве подписи, которую вы сейчас используете, ожидается приемник типаcallable
(он же метод). В любом случае, рад, что смог помочь!