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