質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

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

Python

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

Q&A

解決済

1回答

1600閲覧

引数が一度しか参照されない。

OKA-G

総合スコア16

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/10/24 09:52

編集2020/10/24 10:00

このスクリプトを実行すると、最初にtest0が実行されてその後button0を押してもtest0が実行されません。
引数に何も渡していないほうの関数は普通に実行できています。

何度でも引数を参照して実行するためにはどのような方法が考えられますか。

Python

1# -*- coding: utf-8 -*- 2import sys 3from PySide2.QtWidgets import * 4from PySide2.QtCore import * 5 6class Gui(QDialog): 7 8 def __init__(self, parent=None): 9 super(Gui, self).__init__(parent) 10 self.setWindowFlags(Qt.Dialog|Qt.WindowCloseButtonHint) 11 self.setFixedSize(200, 100) 12 button0 = QPushButton("Push0") 13 button1 = QPushButton("Push1") 14 layout = QVBoxLayout(self) 15 layout.addWidget(button0) 16 layout.addWidget(button1) 17 button0.clicked.connect(self.test0(1, 1)) 18 button1.clicked.connect(self.test1) 19 20 def test0(self, x, y): 21 print(x+y) 22 23 def test1(self): 24 print(1+1) 25 26if __name__ == '__main__': 27 28 app = QApplication(sys.argv) 29 G = Gui() 30 G.show() 31 sys.exit(app.exec_())

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1button0.clicked.connect(self.test0(1, 1))

このコードでは self.test0(1, 1) は connect の時点で呼ばれ、
呼び出した結果の戻り値 (None) を button0.clicked.connect に渡してます。


解決策

functools.partial を使うと、「引数を束縛した関数」を生成できます。

python

1from functools import partial 2 3button0.clicked.connect(partial(self.test0, 1, 1))

他には lambda を使う方法もあります。
但し、for文の内部でループ変数を参照する場合等、
幾つか落とし穴になるケースがあるので、こちらは扱いに注意。

python

1button0.clicked.connect(lambda: self.test0(1, 1))

投稿2020/10/24 10:33

teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

OKA-G

2020/10/24 10:53

ご丁寧にありがとうございます! 理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問