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

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

ただいまの
回答率

90.75%

  • Python 3.x

    5308questions

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

pynput キーワードを式にできない。 反応しない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 171

Sample_Test

score 123

押したボタンをr配列に追加する処理を呼び出した時に、
式をキーワードにできないと言われます。

回避する方法はありませんか?

from pynput import keyboard

class Key_operation:

    r=[] #キー入力用 押す
    R=[] #キー入力用 離す

    # 押す
    def Key_press(key):
        try:
            Key_operation.r+=key.char
        except AttributeError:
            pass

    # 離す
    def Key_release(key):
        Key_operation.R+=key

        if key == Key.esc:
            return False

    # 押した時のみ
    def When_pushed():
        with Listener(Key_operation.Key_press = Key_operation.Key_press) as listener:listener.join()
    # 離した時のみ
    def When_released():
        with Listener(Key_operation.Key_release= Key_operation.Key_release) as listener:listener.join()
    # 押して離した時
    def Pushed_away():
        with Listener(Key_operation.Key_press = Key_operation.Key_press,Key_operation.Key_release= Key_operation.Key_release) as listener:listener.join()


Key_operation.When_pushed()

そもそも、実行できてませんでした。
原因は何でしょうか?

from pynput.keyboard import Key, Listener

def Key_press(key):

    try:
        print(key.char)
    except AttributeError:
        print(key)



def Key_release(key):
    print(key)

    if key == Key.esc:
        return False

# 押した時のみ
with Listener(Key_press= Key_press) as listener:listener.join()

参考にした公式サイトです

https://pypi.org/project/pynput/

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

pynputは使ったことがないので勘ですが、key.charがリストでないのでは?
Key_operation.r+=key.charではなくKey_operation.r.append(key.char)ならどうでしょう。


そもそも、実行できてませんでした。
原因は何でしょうか?

ご提示の公式サイトのサンプルを改造すればいいのでは。
インターフェースに変更があったんじゃないかと推察します。

from pynput.keyboard import Key, Listener

pressed_keys = []

def on_press(key):
    try:
        pressed_keys.append(key.char)
    except AttributeError:
        print(key)

def on_release(key):
    if key == Key.esc:
        return False

kwargs = {
    'on_press': on_press,
    'on_release': on_release
}
with Listener(**kwargs) as listener:
    listener.join()

print(pressed_keys)

Windows10で動作を確認しました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/20 16:17

    with Listener(**kwargs) as listener:
    listener.join()
    自体を終了させたい場合は、どの様に記述するのでしょうか?

    キャンセル

  • 2018/04/20 16:19

    ざっと見た感じだと、登録した関数がFalseを返すとスレッドを終了するようです。
    上記コードの場合、エスケープキーを押せば終了します。

    キャンセル

  • 2018/04/20 16:20

    参考になりました。

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    PHPのマジックメソッドのPython版

    PHPのメソッドに未定義な関数の呼び出しやプロパティの設定・取得が行われた時に、PHPから呼び出してくれる(いわゆるコールバックしてくれるマジックメソッドがあります。 #!/

  • 解決済

    AttributeError: 'Cifar10Reader' object has no attr...

    AttributeError: 'Cifar10Reader' object has no attribute 'bytestream'  のエラー が出ました。 reader.

  • 解決済

    Pythonのthreadingにおける、終了時の処理

    前提・実現したいこと Pythonを使って、動画や画像を表示するGUIを作っています。その中で、みなさまのご支援を頂ながらカメラの画像を取り込んで再生できるところまで来ました。

  • 受付中

    pythonのinput関数ついてです

    pythonのinput関数で一定時間入力が無かったらinputを飛ばすみたいな処理って可能ですか? もし可能でご存知の方がいらっしゃいましたら教えて頂けると助かります。 よろしく

  • 解決済

    Python 3.x 辞書のキー値によって変換する場合の高速化

    Pythonにて、辞書(dict({key,value})を使って、list型の全要素をValue値に変換する際の、 高速化が可能かどうかをご教授いただきたいです。 dict1

  • 解決済

    pythonで別クラスのエラーを出力

    pythonで別クラスの関数を実行しています。 python test2.pyを実行した際に、標準出力に"keiがおかしいよ"と出力されます。 ##test1.py## cla

  • 受付中

    【Python3】String型と判定されてしまい、AttributeErrorが発生する

     前提・実現したいこと PythonでMySQLとclassについて勉強中の初心者です。 コンストラクタでMySQLに接続し、デストラクタで切断するため、cとconnをグローバル変

  • 解決済

    text file editing

    python3 を使ってテキストfileの中の特定の1行だけを指定して消去することは可能でしょうか? できる限りパッケージなどを使わないでできる方法があれば教えていただきたいです。

同じタグがついた質問を見る

  • Python 3.x

    5308questions

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