2017-01-12 14 views
1

サードパーティオブジェクトの既存のメソッドにどのように機能を追加するのですか?サードパーティライブラリの既存のメソッドに機能を追加する

質問が正しく表現されているかどうかわからないので、ここでは達成したいものの例を示します。

def clickColor(button, color): 
    beforeColor = button.palette().color(QPalette.Background) 
    button.setStyleSheet("background-color: %s" % color) 
    QTimer.singleShot(100, lambda: unClickColor(button, beforeColor)) 

def unClickColor(button, beforeColor): 
    button.setStyleSheet("background-color: %s" % beforeColor.name()) 

私はそれをクリックしたときにPyQt5ライブラリのすべてののQPushButtonが点滅します:

次の関数は、ボタンを点滅させるために使用されます。

私は、QPushButtonのメソッドの代わりにclicked.connectというメソッドにclickColor関数を追加していますが、既存のメソッドは変更しないでください。

達成したいことを行う正しい方法は何でしょうか?

答えて

1

カスタムサブクラスを作成し、点滅エフェクトを適用する場合は、通常のQPushButtonの代わりに使用することができます。 Qt Designerを使用している場合は、widget promotionを使用して、uiファイルに追加されたボタンをカスタムクラスに置き換えることもできます(詳細はthis answerを参照)。ここで

は、基本的なデモスクリプトです:

import sys 
from PyQt5 import QtCore, QtGui, QtWidgets 

class BlinkButton(QtWidgets.QPushButton): 
    def __init__(self, *args, **kwargs): 
     super(BlinkButton, self).__init__(*args, **kwargs) 
     self.clicked.connect(self._blink) 
     self._blink_color = QtGui.QColor() 

    def blinkColor(self): 
     return QtGui.QColor(self._blink_color) 

    def setBlinkColor(self, color=None): 
     self._blink_color = QtGui.QColor(color) 

    def _blink(self): 
     if self._blink_color.isValid(): 
      self.setStyleSheet(
       'background-color: %s' % self._blink_color.name()) 
      QtCore.QTimer.singleShot(100, lambda: self.setStyleSheet('')) 

class Window(QtWidgets.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.button = BlinkButton('Test', self) 
     self.button.setBlinkColor('red') 
     self.button.clicked.connect(self.handleButton) 
     layout = QtWidgets.QVBoxLayout(self) 
     layout.addWidget(self.button) 
     layout.addWidget(self.button2) 

    def handleButton(self): 
     print('Hello World!') 

if __name__ == '__main__': 

    app = QtWidgets.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(600, 100, 200, 100) 
    window.show() 
    sys.exit(app.exec_()) 
関連する問題