Saya membuat program jenis stopwatch dengan python dan saya ingin tahu bagaimana mendeteksi jika tombol ditekan (seperti p untuk jeda dan s untuk berhenti), dan saya tidak ingin itu menjadi sesuatu seperti raw_input yang menunggu masukan pengguna sebelum melanjutkan eksekusi. Adakah yang tahu bagaimana melakukan ini dalam loop sementara?
Juga, saya ingin membuat cross-platform ini, tetapi jika itu tidak memungkinkan, maka target pengembangan utama saya adalah linux
python
python-2.7
keypress
detect
lobuo
sumber
sumber
Jawaban:
Python memiliki modul keyboard dengan banyak fitur. Instal, mungkin dengan perintah ini:
Kemudian gunakan dalam kode seperti:
sumber
keyboard
tampaknya membutuhkan root di linux: /Bagi mereka yang menggunakan jendela dan berjuang untuk menemukan jawaban yang berfungsi, inilah milik saya: pynput
Fungsi di atas akan mencetak tombol mana saja yang Anda tekan dan memulai tindakan saat Anda melepaskan tombol 'esc'. Dokumentasi keyboard ada di sini untuk penggunaan yang lebih bervariasi.
Markus von Broady menyoroti masalah potensial yaitu: Jawaban ini tidak mengharuskan Anda berada di jendela saat ini untuk mengaktifkan skrip ini, solusi untuk jendela adalah:
sumber
Seperti yang disebutkan OP tentang raw_input - itu berarti dia menginginkan solusi cli. Linux: kutukan adalah apa yang Anda inginkan (windows PDCurses). Curses, adalah API grafis untuk perangkat lunak cli, Anda dapat mencapai lebih dari sekedar mendeteksi peristiwa penting.
Kode ini akan mendeteksi kunci sampai baris baru ditekan.
sumber
termios
dan sebagainya ...import os
agar dapat keluar dari contoh.win.nodelay(False)
bukanTrue
, itu tidak akan menghasilkan satu juta pengecualian per detik.Ada lebih banyak hal yang bisa dilakukan dengan
keyboard
modul.Berikut beberapa caranya:
Metode # 1:
Menggunakan fungsi
read_key()
:Ini akan memutus lingkaran saat tombol pditekan.
Metode # 2:
Menggunakan fungsi
wait
:Ini akan menunggu Anda untuk menekan pdan melanjutkan kode saat ditekan.
Metode # 3:
Menggunakan fungsi
on_press_key
:Ini membutuhkan fungsi panggilan balik. Saya dulu
_
karena fungsi keyboard mengembalikan acara keyboard ke fungsi itu.Setelah dijalankan, ini akan menjalankan fungsi saat tombol ditekan. Anda dapat menghentikan semua pengait dengan menjalankan baris ini:
Metode # 4:
Metode ini semacam sudah dijawab oleh user8167727 tetapi saya tidak setuju dengan kode yang mereka buat. Ini akan menggunakan fungsi tersebut
is_pressed
tetapi dengan cara lain:Ini akan memutus loop saat pditekan.
Catatan:
keyboard
akan membaca penekanan tombol dari seluruh OS.keyboard
membutuhkan root di linuxsumber
keyboard.wait()
untuk menunggu lebih dari 1 tombol, dan melanjutkan jika salah satu tombol ditekanwait()
tidak memberikan fungsi ini. Anda harus menggunakankeyboard.read_key()
kondisi if yang dikemas dalam loop sementara. Lihat metode # 1suppress
penggunaan kata kunci dalamkeyboard.read_key()
, kapan menggunakannya dan kapan tidak ....Untuk Windows Anda bisa menggunakan
msvcrt
seperti ini:sumber
Gunakan kode ini untuk menemukan tombol mana yang ditekan
sumber
Gunakan PyGame untuk memiliki jendela dan kemudian Anda bisa mendapatkan peristiwa penting.
Untuk suratnya
p
:sumber
Jadi saya membuat .. jenis game .. berdasarkan posting ini (menggunakan pustaka D3D dan Python 3.7).
Berikut ini adalah "fungsi utama" dari game tersebut, yaitu mendeteksi tombol yang ditekan:
Jika Anda menginginkan kode sumber porgram secara lengkap, Anda dapat melihatnya atau mengunduhnya dari sini:
Permainan Kunci Rahasia (GitHub)
(catatan: tombol rahasia ditekan adalah: Ctrl+ F12)
Saya harap Anda dapat menjadi contoh dan bantuan bagi mereka yang datang untuk berkonsultasi informasi ini.
sumber
Saya menyarankan Anda menggunakan PyGame dan menambahkan pegangan acara.
http://www.pygame.org/docs/ref/event.html
sumber
Ini dari paket openCV. Ini mendeteksi penekanan tombol tanpa menunggu.
sumber