Pyqt-qpushbutton-widget

提供:Dev Guides
移動先:案内検索

PyQt-QPushButtonウィジェット

GUIデザインでは、コマンドボタンが最も重要で最も頻繁に使用されるコントロールです。 保存、開く、OK、はい、いいえ、キャンセルなどのボタン キャプションはすべてのコンピューターユーザーに馴染みがあるためです。 PyQt APIでは、 QPushButton クラスオブジェクトはボタンをクリックし、クリックすると特定の機能を呼び出すようにプログラムできます。

QPushButtonクラスは、 QAbstractButton クラスからコア機能を継承します。 長方形の形状で、顔にテキストキャプションまたはアイコンを表示できます。

以下は、QPushButtonクラスの最も一般的に使用されるメソッドの一部です-

Sr.No. Methods & Description
1

setCheckable()

trueに設定されている場合、ボタンの押された状態と解放された状態を認識します

2

toggle()

チェック可能な状態を切り替えます

3

setIcon()

画像ファイルのピックスマップから形成されたアイコンを表示します

4

setEnabled()

falseに設定すると、ボタンは無効になるため、クリックしても信号を発しません

5

isChecked()

ボタンのブール状態を返します

6

setDefault()

ボタンをデフォルトとして設定します

7

setText()

プログラムでボタンのキャプションを設定します

8

text()

ボタンのキャプションを取得します

上記の属性のいくつかで4つのQPushButtonオブジェクトが設定されます。 この例はオブジェクト指向形式で記述されています。イベントのソースを引数としてスロット関数に渡す必要があるためです。

4つのQPushButtonオブジェクトがクラスのインスタンス変数として定義されています。 最初のボタン b1 は、ステートメントによってトグルボタンに変換されます-

self.b1.setCheckable(True)
self.b1.toggle()

このボタンのクリックされた信号は、メンバーメソッドbtnstate()に接続されます。このメソッドは、isChecked()プロパティをチェックすることにより、ボタンが押されたか放されたかを識別します。

def btnstate(self):
   if self.b1.isChecked():
      print "button pressed"
   else:
      print "button released"

2番目のボタン b2 は、顔にアイコンを表示します。 setIcon()メソッドは、任意の画像ファイルのピックスマップオブジェクトを引数として受け取ります。

b2.setIcon(QIcon(QPixmap("python.gif")))

ボタン b3 はsetEnabled()メソッドを使用して無効に設定されます-

b3.setEnabled(False)

PushButton b4 は、setDefault()メソッドによってデフォルトボタンに設定されます。 キャプションへのショートカットは、キャプションの前に&を付けることで作成されます(&Default)。 その結果、キーボードの組み合わせAlt + Dを使用して、接続スロットメソッドが呼び出されます。

ボタンb1とb4はwhichbtn()スロットメソッドに接続されています。 この関数はクリックされたボタンのキャプションを取得することを目的としているため、ボタンオブジェクトを引数として渡す必要があります。 これは、ラムダ関数を使用することで実現されます。

例えば、

b4.clicked.connect(lambda:self.whichbtn(self.b4))

完全なコードは以下のとおりです-

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Form(QDialog):
   def __init__(self, parent=None):
      super(Form, self).__init__(parent)

      layout = QVBoxLayout()
      self.b1 = QPushButton("Button1")
      self.b1.setCheckable(True)
      self.b1.toggle()
      self.b1.clicked.connect(lambda:self.whichbtn(self.b1))
      self.b1.clicked.connect(self.btnstate)
      layout.addWidget(self.b1)

      self.b2 = QPushButton()
      self.b2.setIcon(QIcon(QPixmap("python.gif")))
      self.b2.clicked.connect(lambda:self.whichbtn(self.b2))
      layout.addWidget(self.b2)
      self.setLayout(layout)
      self.b3 = QPushButton("Disabled")
      self.b3.setEnabled(False)
      layout.addWidget(self.b3)

      self.b4 = QPushButton("&Default")
      self.b4.setDefault(True)
      self.b4.clicked.connect(lambda:self.whichbtn(self.b4))
      layout.addWidget(self.b4)

      self.setWindowTitle("Button demo")

   def btnstate(self):
      if self.b1.isChecked():
         print "button pressed"
      else:
         print "button released"

   def whichbtn(self,b):
      print "clicked button is "+b.text()

def main():
   app = QApplication(sys.argv)
   ex = Form()
   ex.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

上記のコードは次の出力を生成します。

QPushButtonウィジェット出力

clicked button is Button1
button released
clicked button is Button1
button pressed
clicked button is &Default