2019年3月1日金曜日

PyQT、オブジェクト名に変数を使う 2


Python 3.7.2 ドキュメント、ってのを眺めてたらFAQに回答があった
まあよくある質問だよね(笑)
-->https://docs.python.org/ja/3.7/faq/programming.html#how-do-i-use-strings-to-call-functions-methods

「様々なテクニックがあります」「一番いいのは、文字列を関数に対応させる辞書を使うことです」
だそうだけど何書いてるんだか良くわからん┐('д')┌
でも他にもこんな方法が
①getattr()
②locals()
③eval()

で、①をやってみたらイケた( ´∀`)
self.ui.pushButton_01.connect(hoge)   は、
str='pushButton_01'
getattr( self.ui , str ).connect(hoge)
と書けばイケます

getattr(object, name[, default])
「object の指名された属性の値を返します ~例えば、 getattr(x, 'foobar') は x.foobar と等価です」
だそうです
ちなみに③のevalはやはり推奨されてませんので使うのやめよう
tcl/tkだと困ったときはevalみたいな感じだったけどevalって無理矢理というか力尽くって感じだよね
エレガントさのかけらも無いというか、やっぱなるべく使わないようにしよう

ちなみに辞書を使うって事はまず辞書を作らなくちゃイケないよね
list={ '1':pushuButton_1 , '2':pushuButton_2 , '3':pushuButton_3 , '4':pushuButton_4 ....} 
ui.list[n].connect(hoge)
だと、最初の辞書作成をループ化できてないからあんまり意味ない┐('д')┌
違うのか??

0 件のコメント:

コメントを投稿