2019年2月21日木曜日

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


出来た(・∀・)ノ
仕事中サボっていろいろ調べたのですぐだった( ´∀`)

コネクト
self.ui.buttonGroup.buttonClicked.connect(self.launch)
関数
def launch(self,event):
  but=self.sender()
  print(event.objectName())                # name
  print( but.id(event) )                         # id
  print(self.ui.buttonGroup.id(event))   # id

ボタングループオブジェクトは、buttonClickedにコネクトした関数に対して、第二引数として押されたボタンのオブジェクトを返す
なので関数に第二引数を設定すれば押されたボタンのオブジェクトが取得できる
でもボタンオブジェクトは自分のIDを知らない、知ってるのはボタングループオブジェクトなのでそこにid()でアクセスする
ボタングループオブジェクトは関数の呼び出し元としてself.sender()で取得できる
→http://yu00.hatenablog.com/entry/2015/09/14/202729
今のケースだと関数からも見えてるから直接self.ui.buttonGroupとしても同じ
ちなみにボタンの名前はボタンオブジェクトのobjectName()で取得できる
ボタンに表示されてるテキストは同様にtext()で取得できる

ボタンのIDについて
QButtonGroup.addButton(self, QAbstractButton ,(int id))
idは振っても振らなくてもいい
振らなければ自動的に-2から始まる負の整数が割り当てられる
振るのであれば正の整数を振ることが推奨される
なぜなら-1は該当ボタン無しのメッセージとして予約済みだから
→http://pyqt.sourceforge.net/Docs/PyQt4/qbuttongroup.html

しかしIDは使えませんわ┐('д')┌
画像は左上のボタンをクリックしたところだけど、ボタン名はpushButton_2でIDは-7
その上のボタン7がID-2で、ボタンとしては上から2行目の右端のボタンです
つまりIDはぐちゃぐちゃ(-_-)
designerはボタンをグループにした場合、ボタンのオブジェクトネームの順番にはaddしてくれないようで、どういう順番かは良くわかんない
IDはそのaddの順番で、-2から順に振られているようです
これじゃあID振っても思ったように分岐できない

きれいにIDを振りたければ改めて振り直すしかない
QButtonGroup.setId (self, QAbstractButton button, int id)
本体pyでグループに関数をコネクトする辺りで1からの連番で振り直せば良いと思う
しかし、ボタンのオブジェクト名は連番にしてるから、その連番を使って分岐は出来る
それでいいかな~(-_-)

0 件のコメント:

コメントを投稿