2016-06-13 10 views
0

私は、マウスがマウスの上に置かれたときにQPushButtonのアイコンを変更するという例を見出しました。私はそれを私のコードに変換しようとしましたが、いくつか問題があります。最初に私が見つけた例をチェックしてください、それは本当に短いです。 http://paste.ubuntu.com/17302717/PyQt5 mousetracking not working

これらのコードは、マウスがオンの場合にボタンのアイコンを変更します。問題がどこにあるここに私のコードがあるエラー

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)と他のバージョンに変更しようとしましたが、動作しませんでした。どのように私は行方不明だ、私はこれを修正することができますか?

EDIT:私は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_()) 

をいずれにせよ、私は本当にあなたが達成しようとしているものを理解していません。あなたのボタンに何らかの種類のホバー効果を作成する必要がある場合は、他にもはるかに優れた方法があります。たとえば、この1:

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

はあなたの最初の例では作業が、2番目されていません私が欲しいものをやっている。だから別のクラス 'class HoverButton(QPushButton)'を作成し、それを自分のコードで使用する必要がありますか? – GLHF

+0

@GLHF私は投稿する前にそれらをテストしてから両方が働いていることを保証することができます。作業がうまくいっているということではありません。私が言ったように、私はあなたが何をしようとしているのかを理解するのが難しいです。いずれの場合でも答えはYesです。私の視点からは、QPushButtonをサブクラス化するのが最善の方法です。 – armatita