2012-01-18 5 views
0

작은 예제를 작성 했으므로 실행할 수 없습니다.pyqt4 mousePressEvent가 호출되지 않았습니다. (위젯이 없습니다.)

from PyQt4 import QtGui, QtCore 
import sys 

class Drawer(QtGui.QWidget): 

    def __init__(self, parent=None): 
     super(Drawer, self).__init__(parent) 
     self.setStyleSheet("QWidget { background-color: %s }" % QtGui.QColor(99, 0, 0).name()) 

    def mousePressEvent(self, event): 
     print 'mouse pressed' 
     self.update(); 

class MyApp(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     self.drawer = Drawer(self) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    myapp = MyApp() 
    myapp.show() 
    sys.exit(app.exec_())  

위젯이 표시되지되지 않은 (더 색 창은 회색입니다) 그리고 난 마우스없이 인쇄를 .. 누르면

어디 내 오류가 무엇입니까?

SOLVED : qiao으로 의견을 보내주십시오. 제 실수는 qt4 종류의 장면 그래프에 위젯을 추가하는 방법입니다. 나는 에 부모님에게 전화해야한다고 생각했습니다. 이것은 QLayout을 추가하지 않고 자식을 추가해야합니다 (이것은 매우 명백합니다 : addWidget은 QLayout에만 쓰여지고 QWidget에는 쓰이지 않고 새로운 자식 추가 가능성이없는 장면 그래프 시스템이 있습니다. 상당히 이상 함)

답변

2

메인 윈도우의 중앙 위젯을 서랍으로 설정해야합니다. 그렇지 않으면 서랍이 기본 창에 연결되지 않습니다.

class MyApp(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     self.drawer = Drawer(self) 
     self.setCentralWidget(self.drawer) 

위의 수정을 수행하면 마우스 누름 이벤트가 올바르게 작동하는 것을 볼 수 있습니다.

색상은 QMainWindow의 스타일 시트를 설정하는 것이 좋습니다. 따라서 Drawer를 다른 위젯 (QLineEdit과 같은)으로 설정하는 것이 좋습니다. 나는 여기서 무엇이 문제인지 모른다.

+0

이 예제에서는 올바르게 실행됩니다. 그러나 그것은 단순화입니다! :(나는 더 큰 GUI가 QtDesigner와 함께 설계되어 있고 : * self.drawer = Drawer (self.ui.drawBox) *. 만약 내가 시도 : * self.ui.drawBox.setCentralWidget (self.drawer) * 내가 얻을 ** AttributeError : 'QWidget'객체에는 'setCentralWidget'속성이 없습니다 ** – nkint

+1

@nkint'setCentralWidget'은'QMainWindow' 인스턴스에만 적용될 수 있습니다. 다른 위젯의 경우 레이아웃을 설정하고 레이아웃에 하위 위젯을 추가해야합니다 . – qiao

+0

해결되었습니다. 감사합니다. – nkint

관련 문제