Импорт Python и «объект не имеет атрибута» с Qt - PullRequest
0 голосов
/ 12 февраля 2010

По результатам исследований 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())

1 Ответ

1 голос
/ 12 февраля 2010

Попробуйте

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

вместо

self.frameRect.setTopLeft(Qt.QPoint(event.x, event.y))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...