質問するログイン新規登録

Q&A

1回答

1956閲覧

PyQt5 QPushButton の表示されたテキストを取得したい

goki_gottan

総合スコア168

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/07/08 09:07

編集2022/07/08 09:45

0

0

QPushButtonにテキストを埋め込みました。その埋め込んだテキストを今度は取得したいと思います。

やりたいことは、QPushButtonをFor文を使用し、複数作成しました。複数作成する上で、ボタンを管理する必要があり、
(たとえば、どのボタンを押したかを判断するために)そのボタン管理のために、作成時にボタンの表示テキストを変化させております。

ボタンを押した際、どのボタンを押したかを、ボタンのテキストを取得すれば判断できると思い、このような方法で実装しました。

for a in range(45): add_button1 = QtWidgets.QPushButton(str(a)) add_button1.clicked.connect(add_image1) s1.append(add_button1)

ここで、

s1.append()

を使用しているのは、ボタンを押した際に、そのボタンのテキストと押したボタンをリンクさせるため、
たとえば、ボタンのテキスト表示が10とあり、そのボタンを押したら、

q1[10]

これで管理できるためです。

ボタンのテキスト取得は、おそらく、

add_button1.text()

で取得できるのですが、どうやら、最後のボタンのテキストのみ取得されるようです。
ここでは45個目に作られたボタンのテキストを表示されるようです。

押したボタンのテキストを取得する方法、または、他の方法でどのボタンを押されたか判断できる方法がありましたら、
ご教示いただけないでしょうか。作り方がFor文ではない方法も良いかもしれません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答1

0

python

1def func(num): 2 print(f'{num}がクリックされました') 3 4for a in range(45): 5 add_button1 = QtWidgets.QPushButton(str(a)) 6 add_button1.clicked.connect(lambda:func(add_button1.text())) 7 s1.append(add_button1)

やっつけだとこんな感じでfuncで処理を切り替えですかね。状況に応じてクリックされても何もしないだとか状況に応じて動作が変わるだとかしますか?

投稿2022/07/08 09:54

編集2022/07/08 09:55
usekay

総合スコア395

goki_gottan

2022/07/09 10:49

回答ありがとうございます。 ボタンを押したら、サブウィンドウを必ず立ち上がる処理をいれる予定です。
goki_gottan

2022/07/10 23:35

実装してみましたが、やはり、45個目のテキストが取得されるようです。
goki_gottan

2022/07/11 00:13

リストをつくって個別対応してみましたが、print(f'{num}とことは、45個目の値がかならず出ます。ちなみに、 add_button[0].text()など個別指定しますとその通り出現します。 def func(num): print(add_button[0].text()) print(add_button[1].text()) print(add_button[2].text()) print(f'{num}がクリックされました') add_button=[] for a in q1: add_button.append(QtWidgets.QPushButton(str(v_1[a]))) for a in range(len(add_button)): add_button[a].clicked.connect(lambda:func(add_button[a].text())) self.setCellWidget(int(add_button[a].text())-1, 0, add_button[a])
goki_gottan

2022/07/11 03:35

取り急ぎ、クリックした際、テーブルのセルがアクティブになっておりますので、そのセルの行でボタンの位置を判別するようにすることで対策できました。根本対策ではありませんが、この方法でどのボタンか判別できました。 print(str(self.currentItem().row()+1)) ボタンを押すと、カレント行を取得で、対応
usekay

2022/07/11 03:38

ああこれは多分ラムダ式内の変数aが参照としてわたってるのが問題ですね。 add_button[a].clicked.connect(lambda:func(add_button[a].text())) ではなく button = add_button[a] button.clicked.connect(lambda:func(button.text())) とすれば意図通りの動作になるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問