Dapatkan Input tanpa Fokus dengan Python/Pygame?

Saya membuat aplikasi kecil untuk saya sendiri agar dapat menampilkan input keyboard saya dan menampilkannya dalam tata letak Joystick, seperti ini:

Tampilan Aplikasi saya saat ini

Ini sendiri, berfungsi dengan baik ketika jendela Pygame terfokus, masalah saya adalah, saya tidak dapat memfokuskan ini sepanjang waktu, bahkan tidak akan pernah memiliki fokus karena bagaimanapun saya akan menggunakan OBS untuk streaming atau saya akan menggunakan emulator saya, dan pygame tidak mendeteksi input yang keluar dari jendela. Apakah ada cara untuk membuat python atau pygame membaca semua input yang dibuat ke komputer??? Saya menabrak tembok di sini. Terima kasih sebelumnya!!


person NyxTheShield    schedule 22.07.2015    source sumber
comment
Pygame tidak bisa melakukan itu untuk Anda dengan penanganan eventnya, karena ia hanya mendengarkan event window. Apa yang Anda cari untuk kait tingkat rendah, lihat di sini Menerapkan kait keyboard tingkat rendah dengan Python dan SetWindowsHookExA sebagai contoh.   -  person sloth    schedule 22.07.2015


Jawaban (2)


Gunakan pygame.event.grab(True)

Ketika program Anda berjalan di lingkungan berjendela, program tersebut akan berbagi perangkat mouse dan keyboard dengan aplikasi lain yang memiliki fokus. Jika program Anda menyetel acara ambil ke True, itu akan mengunci semua input ke dalam program Anda. Yang terbaik adalah tidak selalu mengambil masukan, karena ini mencegah pengguna melakukan hal lain di sistem mereka.

Anda memerlukan cara lain untuk keluar, karena Anda tidak akan dapat menggerakkan mouse keluar dari jendela tampilan.

person Luke Borowy    schedule 25.07.2015
comment
Apakah Anda berbicara tentang set_grab() ? Itu tidak berhasil, sudah mencobanya. - person NyxTheShield; 26.07.2015
comment
Ya saya. Maaf atas kesalahan ejaan. Sayang sekali itu tidak berhasil. - person Luke Borowy; 27.07.2015

Sesuai dengan dua komentar langsung di atas, UNTUK tetap fokus pada jendela pygame (secara efektif menjaga kursor dalam batas-batas jendela pygame sampai saya dapat membuat ini berfungsi dengan kode berikut:

pygame.event.set_grab(True) # Keeps the cursor within the pygame window

Gabungkan kode ini dengan cara keluar dari program dengan menekan tombol seperti tombol ESCAPE (karena tidak mungkin menutup jendela dengan menggerakkan kursor ke bingkai jendela untuk menutupnya dengan pygame.QUIT):

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
            run = False
person thescoop    schedule 09.10.2018