Python导入与Qt的'对象没有属性'问题
根据我在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
结果还是出现同样的错误
更新:根据Messa的评论,我做了一些更改:
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
(也就是说,self().something()
)
1 个回答
1
试试这个
self.frameRect().setTopLeft(Qt.QPoint(event.x, event.y))
而不是这个
self.frameRect.setTopLeft(Qt.QPoint(event.x, event.y))