По результатам исследований Stack Overflow и других сайтов, я на 99% уверен, что у меня проблема из-за неправильного импорта. Ниже представлен подкласс QLabel, который я использую для ответа на некоторые события мыши:
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))
Когда срабатывает mouseMoveEvent, я получаю следующую ошибку:
self.frameRect.setTopLeft(Qt.QPoint(event.x, event.y))
AttributeError: 'builtin_function_or_method' object has no attribute 'setTopLeft'
Другие решения этого типа ошибок, которые я видел, вращались вокруг пространства имен, поэтому мне нужно или не нужно включать Qt.
перед всеми классами Qt, но эта ошибка намного ниже в объектах Qt , Пожалуйста, укажите на мою ошибку!
Я также пробовал:
from PyQt4 import Qt
выдает ту же ошибку
ОБНОВЛЕНИЕ: основываясь на комментарии Мессы, я сделал несколько изменений:
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()))
Похоже, что в Python точечный синтаксис является вызовом функции и должен включать в себя этот завершающий "()
". Это не включает self
(то есть с elf().something()
)