Python导入与Qt的'对象没有属性'问题

0 投票
1 回答
3072 浏览
提问于 2025-04-15 19:13

根据我在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))

撰写回答