PyQt 4.8.5,Python 2.7. Нашел в книге “Rapid GUI Programming with PyQt” простенький пример с сигналами и слотами,и на основе его решил попробовать написать свою маленькую прогу для,так сказать,усвоения материала.Идея была в том, чтобы два сигнала valueChanged(int) от QDial и QSpinbox привязать к одной функции,которая будет менять значение одного из элементов на значение поменявшегося и писать при этом в консоль.Вот код:
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Form(QWidget):
def __init__(self,parent=None):
super(Form,self).__init__(parent)
self.dial=QDial()
self.dial.setNotchesVisible(True)
self.dial.setRange(0,1000)
self.spinbox=QSpinBox()
self.spinbox.setRange(0,1000)
layout=QVBoxLayout()
layout.addWidget(self.dial)
layout.addWidget(self.spinbox)
self.setLayout(layout)
self.connect(self.dial, SIGNAL("valueChanged"), lambda:self.changeValue("dial"))
self.connect(self.spinbox, SIGNAL("valueChanged"), lambda:self.changeValue("spinbox"))
self.setWindowTitle("Signals and slots")
def changeValue(self,author):
print self.spinbox.value(),self.dial.value()
if author == "spinbox":
self.dial.setValue(self.spinbox.value())
elif author == "dial":
self.spinbox.setValue(self.dial.value())
app=QApplication(sys.argv)
form=Form()
form.show()
app.exec_()
Однако же,при запуске ничего не происходит,я вижу форму,могу покрутить QDial и пощелкать QSpinbox,но при этом мой слот как будто не вызывается.Причем так происходит,только если я напишу имена сигналов без аргументов,т.е. valueChanged или valueChanged(),если написать valueChanged(int) то исправно передается значение элемента формы,которое мне не нужно,и от которого я и пытаюсь избавиться,так как проверяю его в своем слоте.Я уже там конечно накосячил много с self,когда пытался почти наугад куда-нибудь его воткнуть,но разобраться обратно уже не могу.И никак не пойму,в чем проблема,потому,собственно,сюда и пишу.Подскажите новичку,пожалуйста:)