Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5捕鼠器不工作_Python_Mouseevent_Python 3.4_Pyqt5_Qpushbutton - Fatal编程技术网

Python PyQt5捕鼠器不工作

Python PyQt5捕鼠器不工作,python,mouseevent,python-3.4,pyqt5,qpushbutton,Python,Mouseevent,Python 3.4,Pyqt5,Qpushbutton,我发现了一个例子,当鼠标悬停在QPushButton上时更改它的图标。我试图将其转换为我的代码,但存在一些问题。首先检查我发现的示例,它非常短 如果鼠标在按钮上,这些代码将更改按钮的图标。下面是我的代码,它会引发错误 返回QPushButton.mouseMoveEvent(QPushButton,事件) TypeError:QPushButton.mouseMoveEvent(QMouseEvent):未绑定方法的第一个参数的类型必须为“QPushButton” 从PyQt5.qtwidts导

我发现了一个例子,当鼠标悬停在QPushButton上时更改它的图标。我试图将其转换为我的代码,但存在一些问题。首先检查我发现的示例,它非常短

如果鼠标在按钮上,这些代码将更改按钮的图标。下面是我的代码,它会引发错误

返回QPushButton.mouseMoveEvent(QPushButton,事件) TypeError:QPushButton.mouseMoveEvent(QMouseEvent):未绑定方法的第一个参数的类型必须为“QPushButton”

从PyQt5.qtwidts导入QApplication、QPushButton、QWidget
从PyQt5.QtGui导入QIcon
从PyQt5.QtCore导入QSize
导入PyQt5.qtwidts、PyQt5.QtCore、sys
类别cssden(QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.mwidget=QMainWindow(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setMouseTracking(True)
自设置固定大小(1400923)
#钮扣
self.mbutton=QPushButton(self)
self.mbutton.setStyleSheet(“背景色:rgb(30,30,30);”
“背景图像:url('resources/twitter logo.png');”
“边框:3倍纯黑;”
“背景位置:中心;”
)
自姆布顿设置几何(2300110,60)
self.mbutton.clicked.connect(self.yaz)
self.show()
def mouseMoveEvent(自身、事件):
如果event.pos().x()>self.mbutton.width()-10或event.pos().y()>self.mbutton.height()-10\
或event.pos().x()<10或event.pos().y()<10:
bmp=QIcon(“1.png”)
self.mbutton.setIcon(bmp)
其他:
bmp=QIcon('2.png'))
self.mbutton.setIcon(bmp)
自组装(QSize(200200))
返回QPushButton.mouseMoveEvent(self,event)
def yaz(自我):
打印(“按下按钮”)
app=QApplication(sys.argv)
app.setStyleSheet(“QMainWindow{背景色:rgb(30,30,30);边框:2px实心rgb(20,20,20)}”)
ex=cssden()
sys.exit(app.exec_())
我不明白问题出在哪里。我尝试将
return QPushButton.mouseMoveEvent(self,event)
更改为
return QPushButton.mouseMoveEvent(QPushButton,event)
和其他版本,但没有成功。我错过了什么,我该怎么修复


编辑:我将
self.setMouseTracking(True)
更改为
self.mbutton.setMouseTracking(True)
,现在没有错误,但图标仍然没有更改。为什么图标没有更改?

您的代码存在一些问题,即导入问题。但主要的问题是,您不需要这样做:
returnqpushbutton.mouseMoveEvent(self,event)

请尝试对代码进行以下更正:

from PyQt5.QtWidgets import QApplication,QPushButton,QWidget from
PyQt5.QtGui import QIcon from PyQt5.QtCore import QSize from PyQt5
import QtCore, QtWidgets, QtGui

import PyQt5.QtWidgets,PyQt5.QtCore,sys

class cssden(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        # self.mwidget = QMainWindow(self)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.setMouseTracking(True)

        self.setFixedSize(1400,923)


        #Button
        self.mbutton = QPushButton(self)
        self.mbutton.setStyleSheet("background-color: rgb(30,30,30);"
                                   "background-image: url('resources/twitter-logo.png');"
                                   "border: 3px solid black;"
                                   "background-position: center;"
                                   )
        self.mbutton.setGeometry(2,300,110,60)
        self.mbutton.clicked.connect(self.yaz)

        self.show()
    def mouseMoveEvent(self, event):

        if event.pos().x()>self.mbutton.width()-10 or event.pos().y()>self.mbutton.height()-10\
                    or event.pos().x() < 10 or event.pos().y()< 10:
            bmp = QIcon("1.png")
            self.mbutton.setIcon(bmp)
        else:
            print(1)
            bmp = QIcon('2.png')
            self.mbutton.setIcon(bmp)
        self.mbutton.setIconSize(QSize(200,200))
        # return self.mbutton.mouseMoveEvent(event)

    def yaz(self):
        print ("button pressed")

app = QApplication(sys.argv)
app.setStyleSheet("QMainWindow{background-color:
rgb(30,30,30);border: 2px solid rgb(20,20,20)}")

ex = cssden() sys.exit(app.exec_())
我建议以下答案:

(我的解决方案基于此方法)


您的代码有几个问题,即导入问题。但主要的问题是,您不需要这样做:
returnqpushbutton.mouseMoveEvent(self,event)

请尝试对代码进行以下更正:

from PyQt5.QtWidgets import QApplication,QPushButton,QWidget from
PyQt5.QtGui import QIcon from PyQt5.QtCore import QSize from PyQt5
import QtCore, QtWidgets, QtGui

import PyQt5.QtWidgets,PyQt5.QtCore,sys

class cssden(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        # self.mwidget = QMainWindow(self)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.setMouseTracking(True)

        self.setFixedSize(1400,923)


        #Button
        self.mbutton = QPushButton(self)
        self.mbutton.setStyleSheet("background-color: rgb(30,30,30);"
                                   "background-image: url('resources/twitter-logo.png');"
                                   "border: 3px solid black;"
                                   "background-position: center;"
                                   )
        self.mbutton.setGeometry(2,300,110,60)
        self.mbutton.clicked.connect(self.yaz)

        self.show()
    def mouseMoveEvent(self, event):

        if event.pos().x()>self.mbutton.width()-10 or event.pos().y()>self.mbutton.height()-10\
                    or event.pos().x() < 10 or event.pos().y()< 10:
            bmp = QIcon("1.png")
            self.mbutton.setIcon(bmp)
        else:
            print(1)
            bmp = QIcon('2.png')
            self.mbutton.setIcon(bmp)
        self.mbutton.setIconSize(QSize(200,200))
        # return self.mbutton.mouseMoveEvent(event)

    def yaz(self):
        print ("button pressed")

app = QApplication(sys.argv)
app.setStyleSheet("QMainWindow{background-color:
rgb(30,30,30);border: 2px solid rgb(20,20,20)}")

ex = cssden() sys.exit(app.exec_())
我建议以下答案:

(我的解决方案基于此方法)


您的第一个示例不起作用,但第二个示例正在做我想做的事情。因此,我必须制作另一个类
类HoverButton(QPushButton)
并在我的代码中使用它?@GLHF我可以保证这两个类都正常工作,因为我在发布之前已经测试过它们。注意:工作并不意味着工作顺利。正如我所说的,我很难理解你想做什么。在任何情况下,答案都是肯定的:在我看来,最好的方法是子类化QPushButton。这可以通过使用setStyleSheet(QPushButton:hover{image:url()})实现。第一个示例不起作用,但第二个示例正在做我想做的事情。因此,我必须制作另一个类
类HoverButton(QPushButton)
并在我的代码中使用它?@GLHF我可以保证这两个类都正常工作,因为我在发布之前已经测试过它们。注意:工作并不意味着工作顺利。正如我所说的,我很难理解你想做什么。在任何情况下,答案都是肯定的:在我看来,最好的方法是子类化QPushButton
from PyQt5.QtWidgets import QApplication,QPushButton,QWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize
from PyQt5 import QtCore, QtWidgets, QtGui

import PyQt5.QtWidgets,PyQt5.QtCore,sys

class HoverButton(QPushButton):
    mouseHover = QtCore.pyqtSignal(bool)

    def __init__(self, parent=None):
        QPushButton.__init__(self, parent)
        self.setMouseTracking(True)

    def enterEvent(self, event):
        self.mouseHover.emit(True)
        bmp = QIcon("1.png")
        self.setIcon(bmp)
        self.setIconSize(QSize(200,200))

    def leaveEvent(self, event):
        self.mouseHover.emit(False)
        bmp = QIcon("2.png")
        self.setIcon(bmp)
        self.setIconSize(QSize(200,200))

class cssden(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        # self.mwidget = QMainWindow(self)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.setMouseTracking(True)

        self.setFixedSize(1400, 923)


        #Button
        self.mbutton = HoverButton(self)
        self.mbutton.setStyleSheet("background-color: rgb(30,30,30);"
                                   "background-image: url('resources/twitter-logo.png');"
                                   "border: 3px solid black;"
                                   "background-position: center;"
                                   )
        self.mbutton.setGeometry(2,300,110,60)
        self.mbutton.clicked.connect(self.yaz)
        self.show()

    def yaz(self):
        print("button pressed")

app = QApplication(sys.argv)
app.setStyleSheet("QMainWindow{background-color: rgb(30,30,30);border: 2px solid rgb(20,20,20)}")

ex = cssden()
sys.exit(app.exec_())