2010-02-12 7 views
0

스택 오버플로 및 기타 사이트에 대한 연구에서 99 %는 내가 가져 오는 문제가 잘못된 가져 오기로 인한 것임을 확신합니다. 다음은 좀 마우스 이벤트에 응답하기 위해 사용 해요 QLabel의 서브 클래스입니다 :이 유형의 오류에Python 가져 오기 및 '객체에 Qt가없는 속성이 있음'

self.frameRect.setTopLeft(Qt.QPoint(event.x, event.y)) 
AttributeError: 'builtin_function_or_method' object has no attribute 'setTopLeft' 

다른 솔루션 : mouseMoveEvent 나는 다음과 같은 오류가 트리거됩니다

import Qt 
import sys 

class ASMovableLabel(Qt.QLabel): 

    def mouseReleaseEvent(self, event): 

     button = event.button() 
     if button == 1: 
      print ('LEFT CLICK') 

    def mousePressEvent(self, event): 

     button = event.button() 
     if button == 1: 
      print ('LEFT CLICK') 
     elif button == 3: 
      print ('RIGHT CLICK') 
      self.setLayout() 

    def mouseMoveEvent(self, event): 
     print ("you moved the mouse: %f, %f", event.x, event.y) 
     self.frameRect.setTopLeft(Qt.QPoint(event.x, event.y)) 

나는 이름 공간을 중심으로 돌아 보았습니다. 그래서 모든 Qt 클래스 앞에 Qt.을 포함시킬 필요는 없겠지만,이 오류는 Qt 객체에서 훨씬 더 멀리 떨어져 있습니다. 제 실수를 지적하십시오!

나는 또한 시도 : 나는 몇 가지 변경했다 메사의 의견에 따라 :

from PyQt4 import Qt 

그것은 같은 오류를

UPDATE를 제공

import Qt 
import sys 

class ASMovableLabel(Qt.QLabel): 

    def mouseReleaseEvent(self, event): 

     button = event.button() 
     if button == 1: 
      print ('LEFT CLICK') 

    def mousePressEvent(self, event): 

     button = event.button() 
     if button == 1: 
      print ('LEFT CLICK') 
     elif button == 3: 
      print ('RIGHT CLICK') 
      self.setLayout() #this won't set to nil 

    def mouseMoveEvent(self, event): 
     self.frameRect().setTopLeft(Qt.QPoint(event.globalX(), event.globalY())) 

을 그래서 보인다 파이썬에서 도트 구문은 함수 호출이며 그 뒤에 "()"을 포함해야합니다. 이 self (예를들 elf().something())

+0

광고보십시오 포함되지 않습니다 - 그냥 PyQt는, 아니 그 파이썬 습관 대신 C++ 습관을 따른다. 물론 frameRect 속성을 가진 클래스를 만들면'self.frameRect.setTopLeft (...)'라고 쓸 수 있습니다. 파이썬에서는 속성의 getter/setter (속성 장식자를 통해)를 작성할 수도 있습니다. 왜 PyQt에서 사용되지 않는지 모르겠습니다. – Messa

답변

1

는 "도트 구문은 함수 호출이다 파이썬에서"

self.frameRect().setTopLeft(Qt.QPoint(event.x, event.y)) 

대신

self.frameRect.setTopLeft(Qt.QPoint(event.x, event.y)) 
관련 문제