2016-06-13 14 views
0

마우스를 올려 놓았을 때 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.mbutton.setMouseTracking(True)self.setMouseTracking(True) 변경 및 오류 지금,하지만 아이콘 어쨌든 변경하지 않습니다. 왜 아이콘이 바뀌지 않는 걸까요?

답변

2

코드에는 수입에 따라 몇 가지 문제가 있습니다. return QPushButton.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_()) 

을 어떤 경우에, 난 정말 당신이 달성하려고하는 것을 이해하지 않습니다. 버튼에 어떤 종류의 호버 효과를 만들어야하는 경우 훨씬 더 좋은 방법이 있습니다. 예를 들어이 하나

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_()) 

나는 다음과 같은 답변 권합니다 :

PyQT how to make a QEvent.Enter on QPushbutton? (내 솔루션은이 방법을 기반으로) 첫 번째 예제는 작동하지 않습니다

Pyqt Mouse hovering on a QPushButton

+0

,하지만 두 번째 하나는 내가 원하는 것을하고있다. 그래서 나는 다른 클래스'class HoverButton (QPushButton)'을 만들고 그것을 나의 코드에 사용해야 만 하는가? – GLHF

+0

@GLHF 게시하기 전에 테스트 한 이후로 둘 다 작업하고 있음을 확신 할 수 있습니다. 작업이 잘 작동한다는 것을 의미하지는 않습니다. 내가 말했듯이, 당신이하려는 것을 이해하는데 약간의 어려움이 있습니다. 어쨌든 대답은 Yes입니다. 내 견해로는 QPushButton을 서브 클래 싱하는 것이 가장 좋습니다. – armatita