Итак, я создаю меню опций, основанное на некоторых файлах в моей системе. У меня есть список списков объектов, которые мне нужно для динамического генерации опции в меню, и должны иметь возможность позволить функции, которая делает создание, знать, какой объект использовать. После некоторых исследований я нашел сообщение ниже. Я не мог комментировать, так как моя репутация еще не высока: How to pass arguments to callback functions in PyQtTrouble Understanding Signal Mapper PyQt
Когда я запускаю это, преобразователь сигналов работает неправильно. Он даже не вызывает handleButton правильно. Любые идеи относительно правильного использования картографа сигналов?
from PyQt4 import QtGui, QtCore
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.mapper = QtCore.QSignalMapper(self)
self.toolbar = self.addToolBar('Foo')
self.toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly)
for text in 'One Two Three'.split():
action = QtGui.QAction(text, self)
self.mapper.setMapping(action, text)
action.triggered.connect(self.mapper.map)
self.toolbar.addAction(action)
self.mapper.mapped['QString'].connect(self.handleButton)
self.edit = QtGui.QLineEdit(self)
self.setCentralWidget(self.edit)
def handleButton(self, identifier):
print 'run'
if identifier == 'One':
text = 'Do This'
print 'Do One'
elif identifier == 'Two':
text = 'Do That'
print 'Do Two'
elif identifier == 'Three':
print 'Do Three'
text = 'Do Other'
self.edit.setText(text)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.resize(300, 60)
window.show()
sys.exit(app.exec_())
EDIT:
Я обнаружил, что при использовании соединений сигнал/слот старого стиля это исправлено:
#action.triggered.connect(self.mapper.map)
self.connect(action, QtCore.SIGNAL("triggered()"), self.mapper, QtCore.SLOT("map()"))
и
#self.mapper.mapped['QString'].connect(self.handleButton)
self.connect(self.mapper, QtCore.SIGNAL("mapped(const QString &)"), self.handleButton)
Am I неправильно использовать соединения нового стиля?
Основано на this post, а также original link Я отправил сообщение, я думал, что делаю все правильно.
Спасибо @ekhumoro попытается установить более новую версию – jspada