предположим, у вас есть 3 экземпляра QRadioButtons внутри класса
self.Option1 = QRadioButton()
self.Option2 = QRadioButton()
self.Option2 = QRadioButton()
(для краткости я не написал весь скрипт), и вы хотите использовать их для выполнения определенной функции, когда пользователь щелкает еетак что вы делаете
self.connect(self.Option1,SIGNAL("clicked()"), self.myFunction)
self.connect(self.Option2,SIGNAL("clicked()"), self.myFunction)
self.connect(self.Option2,SIGNAL("clicked()"), self.myFunction)
Как передать аргументы в myFunction, чтобы она знала, какой из QRadioButtons был нажат пользователем?так что я могу делать такие вещи, как
def myFunction(choice):
if choice == Option1:
do something
if choice == Option2:
do something
Сейчас у меня есть 3 функции, каждая для каждого подключения, как это
self.connect(self.Option1,SIGNAL("clicked()"), self.myFunction1)
self.connect(self.Option2,SIGNAL("clicked()"), self.myFunction2)
self.connect(self.Option2,SIGNAL("clicked()"), self.myFunction2)
И этот подход работает просто отлично, но вы можете увидеть, насколько быстрокод может расти, потому что с каждым добавляемым виджетом мне нужно будет написать хотя бы одну новую функцию или изменить существующие, это будет кошмаром сопровождения (не говоря уже о том, что он выглядит некрасиво и предотвращает повторное использование кода).
Быстрый визит в Google дал мне это:
self.label = QLabel(" ")
self.connect(self, SIGNAL("didSomething"),
self.update_label)
self.do_something()
def do_something(self):
self.emit(SIGNAL("didSomething"), "important", "information")
def update_label(self, value1, value2):
self.label.setText(value1 + " " + value2)
(опять же, я не включил весь сценарий, но вы можете проверить его здесь ) То, что он сделал, былосоздание метода для определения пользовательского эмиттера, который отправляет аргументы при отправке, а затем активирует его вручную, используя
self.do_something()
Так что, естественно, функция connect выбирает это излучение и передает аргументы функции update_label, частично достигая того, что яхотеть сделать.Но он делает это вручную, есть ли способ автоматически «перехватывать» стандартные сигналы (например, сигнал clicked (), который излучает QRadioButtons) и добавлять к нему аргументы, чтобы они передавались в функцию для работы с ними?
Заранее спасибо