Čítanie znakov z klávesnice – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Čítanie znakov z klávesnice – Python – Fórum – Programujte.comČítanie znakov z klávesnice – Python – Fórum – Programujte.com

 

Mates
~ Anonymní uživatel
890 příspěvků
3. 2. 2024   #1
-
0
-

Zdravim

potreboval by som čítať znaky z klávesnice  - vytvoriť cyklus, ktorý bude vypisovať hviezdičku a kontrolovať, či je stlačená klávesa. Keď zistí, že je nejaká klávesa stlačená, načíta ju a podľa toho, čo to je, tak pokračuje. Niečo ako toto, ale nefunguje to tak, ako by som chcel - vypisuje aj znak ktorý stlačím.

while x!="esc":
    print("*",end="")
    if is_pressed:
        x = read_key()

Nahlásit jako SPAM
IP: 78.99.32.–
angna
~ Anonymní uživatel
11 příspěvků
4. 2. 2024   #2
-
0
-

Na to ve standardním Pythonu není úplně univerzální řešení.

Pokud jsi na Windows, tak bys měl mít dostupný modul "msvcrt", který tyto funkce má.

import msvcrt
...
if msvcrt.kbhit():
    ch = msvcrt.getch()
Nahlásit jako SPAM
IP: 213.211.51.–
Mates
~ Anonymní uživatel
890 příspěvků
4. 2. 2024   #3
-
0
-

#2 angna
aj to už som skúšal a ani to nefunguje - proste ten program ma nekonečný cyklu a spadne

from msvcrt import *

x = ""
while x!="p":
    print("*",end="")
    if kbhit():
        x = getch()

Nahlásit jako SPAM
IP: 78.99.32.–
angna
~ Anonymní uživatel
11 příspěvků
4. 2. 2024   #4
-
0
-

Buď nekonečný cyklus nebo pád, těžko obojí. Na pád bych to neviděl a nekonečný cyklus je možný, pokud ukončovací podmínka nikdy nebude splněna. Tak bych se podíval, co máš v `x` po getch. Zdá se, že by to mohl být bajt a ne znak a pak by ta podmínka teda byla třeba `while x != b"p"`. Nevím, přidej tam print a podívej se.

Nahlásit jako SPAM
IP: 213.211.51.–
Mates
~ Anonymní uživatel
890 příspěvků
4. 2. 2024   #5
-
0
-

#4 angna
...myslel som tak, že je to nekonečný cyklus a keď ho ukončím ctrl+c, tak napíše, že nereaguje a zavrie cely Python.

každopádne.. keď dám getch() tak je to byte a aj s tým b"p" to nefunguje a keď dám read_key, tak je to str.

Čiže, ak to dobre chápem, tak v Pythone nedokážem spraviť nejak jednoducho načítavanie klávesov v cykle bez toho, aby som to načítaval inputom....

chcel som úplne jednoduchý program, ktorý číta klávesy v cykle bez toho, aby som musel dávať enter a aby sa stlačené klávesy nevypisovali... a  ukončiť to klávesou, ktorou ja chcem (napr. esc)

ak sú nejaké nápady, budem rád...

ďakujem 

Nahlásit jako SPAM
IP: 78.99.32.–
peter
~ Anonymní uživatel
3981 příspěvků
5. 2. 2024   #6
-
0
-

   

raw_input("Press Enter to continue...")



input("Press Enter to continue...")  """ input(prompt) is equivalent to eval(raw_input(prompt)).



import msvcrt as m
def wait():
    m.getch()



import termios, fcntl, sys, os
...
c = sys.stdin.read(1) """ je k tomu slozity kod :)



from __future__ import print_function
import os
import platform

if platform.system() == "Windows":
    os.system("pause")
else:
    os.system("/bin/bash -c 'read -s -n 1 -p \"Press any key to continue...\"'")
    print()



try:
    input("Press enter to continue")
except SyntaxError:
    pass



# import sys, os

def wait_key():
    ''' Wait for a key press on the console and return it. '''
    result = None
    if os.name == 'nt':
        import msvcrt
        result = msvcrt.getwch()
    else:
        import termios
        fd = sys.stdin.fileno()

        oldterm = termios.tcgetattr(fd)
        newattr = termios.tcgetattr(fd)
        newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
        termios.tcsetattr(fd, termios.TCSANOW, newattr)

        try:
            result = sys.stdin.read(1)
        except IOError:
            pass
        finally:
            termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)

    return result
Nahlásit jako SPAM
IP: 2001:718:2601:258:d9f8:72f2:f1a2:9f0...–
peter
~ Anonymní uživatel
3981 příspěvků
5. 2. 2024   #7
-
0
-

zkusil jsem google = python wait for keypress , vic o tom nevim. Asi bys mel vytahovat klavesu pres system, az ma system nad tim kontrolu.

Nahlásit jako SPAM
IP: 2001:718:2601:258:d9f8:72f2:f1a2:9f0...–
angna
~ Anonymní uživatel
11 příspěvků
5. 2. 2024   #8
-
0
-

#5 Mates
Dostaneš odpověď, jak udělat přesně to na co se ptáš a vyvodíš z toho, že to nejde...

Buď ty funkce nefungují, mně fungují, nebo vracejí něco jiného než čekáš, tak si tam přidej výpis návratové hodnoty.

Možná jsi ten kód napsal špatně, možná mačkáš špatnou klávesu, možná to spouštíš v IDE, kde přímé čtení kláves nefunguje. Těžko hádat.

Nahlásit jako SPAM
IP: 213.211.51.–
Mates
~ Anonymní uživatel
890 příspěvků
7. 2. 2024   #9
-
0
-

Dostaneš odpověď, jak udělat přesně to na co se ptáš a vyvodíš z toho, že to nejde...

to som len reagoval na to, ze si pisal, ze nie je na to univerzalne riesenie

Buď ty funkce nefungují, mně fungují, nebo vracejí něco jiného než čekáš, tak si tam přidej výpis návratové hodnoty.

nechapem, ako by ti to mohlo fungovat, ked by si ten kod presne skopiroval... ved to nemoze jednemu fungovat dobre a druhemu nie...

Možná jsi ten kód napsal špatně, možná mačkáš špatnou klávesu, možná to spouštíš v IDE, kde přímé čtení kláves nefunguje. Těžko hádat.

kod som skopiroval... klavesu nemackam zle, a nespustam to v IDE...

chcel som uplne jednoduchy kod, ktory by pochopil aj zaciatocnik a nie kod, v ktorom sa tazko vyzna aj odbornik....

... a uz som to vyriesil a toto je cely kod - plne funkcny...

from msvcrt import *
from time import *
x = ""
while x!=chr(27):
    putwch("*")
    sleep(0.5)
    if kbhit():
        x = getwch()


kazdopadne vsetkym dakujem za pomoc a ochotu...

Nahlásit jako SPAM
IP: 78.99.32.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

Prechadzanie znakov — založil delphak

Nacitanie znakov — založil kiklop

Porovnanie znakov — založil zonda

Return znakov stringu — založil Martin

Zámena ASCII znakov — založil nevedko01

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý