2010-05-26 5 views
1

저는 PyQt4로 시작했는데 지금은 이벤트에 문제가 있습니다.PyQT의 이벤트 소스를 인식하십시오.

MainWindow라는 하나의 메인 클래스가 있습니다. MainWindow는 ButtonX 유형의 버튼 목록을 가지고 있습니다 (inherentnce form QPushButton). 나는 2 가지 해결책 중 하나를 달성하기를 원한다.

1) 목록에서 버튼 중 하나를 클릭 한 후 MainWindow의 한 가지 방법을 실행하고 싶습니다. 거기에서 이벤트 소스를 읽을 수 있기를 원합니다 (클릭 된 버튼 인식)

2) 두 번째 해결책은 ButtonX 클래스에 정의 된 메소드를 실행하는 것입니다. 내가 뭘하려

은 다음과 같습니다

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0).buttonMethod()) 

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue()")) 

심지어이 줄

가 나는 실행하고 싶은 목록에서 버튼을 클릭 한 후 파이썬 인터프리터

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue")) 

답변

4

1) 중단 발생 시킬수 MainWindow의 한 가지 방법. 이벤트 소스를 읽을 수 있기를 원합니다 (클릭 된 버튼 인식)

QObject.sender()을 사용하여 이벤트 소스에 액세스 할 수 있습니다. 그러나 지침에서 알 수 있듯이 QSignalMapper을 사용하거나 더 객체 지향적 인 방식으로 작업하는 것이 더 좋습니다.

2) 두 번째 해결 방법은 ButtonX 클래스에 정의 된 메서드를 실행하는 것입니다.

self.getButton(0, 0).buttonMethod() 

위의 다음 매개 변수 0, 0getButton을 평가하고 것, 그 객체에 전화buttonMethod 방법 : 조심스럽게 첫 번째 연결 호출의 마지막 인수에 입력 한 내용에

봐 . 따라서 buttonMethod이 메소드를 리턴하지 않으면, buttonMethod의 리턴 값을 연결 호출의 마지막 매개 변수로 사용합니다. 이 메소드가 함수를 반환하면, 이것은 정상입니다.

오히려, 나는 다음과 같은 일을 보여야하는데 : 그들은 정확한 구문을 설명하고 좋은 예를 제공 하겠지만

self.getButton(0, 0).buttonMethod # note no parenthesis at end 

는 PyQt는 함께 제공되는 PyQt는 예제 디렉토리를 살펴 보자. ` `self.b1.clicked.connect (self.buttonWasPressed) :

는 새로운 스타일의 슬롯 및 신호를 사용할 수 있습니다 QT4에서
class MW(QMainWindow): 
    def __init__(self, *args) 
     QMainWindow.__init__(self, *args) 
     layout = QHBoxLayout(self) 
     self.b1 = QPushButton("Button1") 
     self.b2 = QPushButton("Button2") 
     layout.addWidget(self.b1) 
     layout.addWidget(self.b2) 
     self.connect(self.b1, SIGNAL("clicked()"), self.buttonWasPressed) 
     self.connect(self.b2, SIGNAL("clicked()"), self.buttonWasPressed) 

    def buttonWasPressed(self): 
     print "button %s was pressed" % self.sender() 
+0

, 귀하의 예제에서의 모습 :

여기에 하나의 작은 예입니다 – mrossi

관련 문제