我發現一個例子,當鼠標懸停在它上面時,改變QPushButton的圖標。我試圖將其轉換爲我的代碼,但有一些問題。首先查看我發現的例子,它非常短。 http://paste.ubuntu.com/17302717/PyQt5鼠標跟蹤不起作用
這些代碼改變按鈕的圖標,如果鼠標在上面。這裏是我的代碼是引發錯誤
return QPushButton.mouseMoveEvent(QPushButton, event) TypeError: QPushButton.mouseMoveEvent(QMouseEvent): first argument of unbound method must have type 'QPushButton'
from PyQt5.QtWidgets import QApplication,QPushButton,QWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize
import PyQt5.QtWidgets,PyQt5.QtCore,sys
class cssden(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:
bmp = QIcon('2.png')
self.mbutton.setIcon(bmp)
self.mbutton.setIconSize(QSize(200,200))
return QPushButton.mouseMoveEvent(self, 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_())
我不明白問題出在哪裏。我試圖將return QPushButton.mouseMoveEvent(self, event)
更改爲return QPushButton.mouseMoveEvent(QPushButton, event)
和其他版本,但沒有奏效。我錯過了什麼,我該如何解決這個問題?
編輯:我將self.setMouseTracking(True)
更改爲self.mbutton.setMouseTracking(True)
,現在沒有錯誤,但圖標無論如何不會改變。爲什麼圖標沒有改變?
你的第一個例子是不是工作,而是第二一個正在做我想做的事。所以我必須創建另一個類'HoverButton(QPushButton)'並在我的代碼中使用它? – GLHF
@GLHF我可以保證這兩個工作,因爲我已經測試他們發佈之前。注意工作並不意味着運作良好。正如我所說,我在理解你想要做的事情方面有些困難。在任何情況下,答案都是肯定的:從我的角度來看,最好的方法是繼承QPushButton。 – armatita