2016-07-21 13 views
1

まず、私の悩みのコード範囲:PyQt5:QMessageBox standardButtonsで明確化connect()メソッド

from PyQt5 import QtWidgets, QtCore 

# I found this function on the web: 
def msgbtn(i): 
    """ 
    This function works, and returns "Ok" or "Cancel" (string object). 
    """ 
    print("Button pressed is:", i.text()) 
    return i.text() 


# Create a basic message box 
msg = QtWidgets.QMessageBox() 
msg.setText("Try") 
msg.setWindowTitle("My Title") 
# Add the standard buttons "Ok" and "Cancel" 
msg.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel) 

# Here, I tried to connect a function without argument, it works. 
msg.buttonClicked.connect(msgbtn) 

だから、この時点で、私は「OK」または「キャンセル」している文字列で返され、それは良いことです。しかし、私はこの接続された関数(msgbtn)に余分な引数を追加したい。私はmsnbtnでコマンド "type(i)"を実行し、iオブジェクトのクラスはQPushButtonです。問題は、このクラスに属するメッセージボックスの属性が見つかりませんでした。「OK」および「キャンセル」standardButtonクラスオブジェクトを返すstandardButton()が見つかり、テキスト属性を持たないことです。この問題を通過する

は、私はこれを試してみました:

def msgbtn(i, extra_arg): 
    print(i) 
    print(extra_arg) 


msg.buttonClicked.connect(lambda: msgbtn(msg.result(), my_arg)) 

QMessageBox(Qt5 doc)のこのメソッドは、「キャンセル」が押された場合、「OK」を押すと、4194304された場合は1024を返します。

私はさらに行くためにこれに対処することができますが、私は私がmsg.buttonClicked.connect(msgbtn)を呼び出すときに、誰かがメッセージボックスのどのオブジェクトが引数として渡されることを知っているあなたを求めますか?

答えて

1

buttonClicked信号は、クリックされたボタンを送信します。ドキュメンテーションは、パラメータがであり、QPushButtonクラスによって継承された抽象基本クラスであることを示しています。

あなたのコード例は次のように固定することができます。

def msgbtn(button, arg): 
    print(button.text()) 
    print(arg) 

msg.buttonClicked.connect(lambda button, arg=my_arg: msgbtn(button, arg)) 

これがlambdaのデフォルト引数としてmy_argの現在の値をキャッシュします。