2019年2月20日水曜日

PyQT、押されたボタンのIDを取得する



またはまりました(-_-)
簡単だと思ってたんだけどな~

自作のGoClipをPyQtに移植しようと思って、こんな感じでボタン郡を配置した
タブの上にフレームを乗せそこにgridでボタンを乗せた
フレームのダブルクリックに関数をコネクトして、関数内でボタンのIDを取得して分岐させるプランだった

しかし、フレームはクリックのシグナルを受け取らないのだった!!(゚Д゚)!!
どこかの解説サイトで見てたのでおかしいなと思ったら、wxPyだった
なぜwxで出来るのにQtでは出来ないんだ!┐('д')┌
シグナルを自作する道はあるんだろうけど、そもそも無いことがおかしい

で、調べたら、ボタンをグループ化すれば良いって事がわかった
グループを作ってボタンを一つづつAddしていくだけなので本体のpyでも出来るんだろうけど、画像の通り、desigenerで出来ました( ´∀`)
で、本体のpyでこのグループにコネクトする

self.<>.buttonGroup.buttonClicked.connect(self.launch)
def launch(self,event):
  but=self.sender()
  print(but.objectName())  #   .text() --ボタンの表示名
  print(event)

こんな感じですね
シグナルは<buttonClicked>です
関数の中で、self.sender()のobjectName()でボタンの内部の名前が取得できました
でもまだIDは取得できてないんすよ┐('д')┌
関数に第二引数を設定すればそこに押されたボタンの情報が入って来るところまではわかったんだけど、IDはまだ取り出せてない
ボタンの名前さえわかれば分岐は出来るけどね
でも取得できないはずがないのでもう少し頑張ります(・∀・)ノ

いろいろ調べてるとクラスの仕組み、基本的なところが理解できてないんだなあと感じます
承継したクラスは親のプロパティやメソッドは当然持ってるから、オブジェクトを調べる際に親は何かって重要なんだね
Qtは基本的にC++のツールだから、C++を勉強したらもう少し理解が深まるのかもしれない、情報も多いしなあ

0 件のコメント:

コメントを投稿