2016-11-17 4 views
5

में कुंजी दबाने की लंबाई निर्धारित मान लीजिए कि मैं एक बहुत ही बस अजगर में कार्यक्रम इंगित करता है कि कितनी देर तक एक कुंजी दबाने बनाना चाहते हैं। इसलिए यदि मैं कुछ क्षणों के लिए j कुंजी टाइप और रखता हूं, तो मैं the key 'j' was pressed for 1.1 seconds जैसी जानकारी प्रदर्शित करने में सक्षम एक प्रोग्राम लिखना चाहता हूं।अजगर

जो मैं समझता हूं उससे, जिस तरह से इसे हासिल किया जाना चाहिए, वह कुंजीपटल घटनाओं और KEYUP घटनाओं का पता लगाने और समयबद्ध करने और टाइमस्टैम्प के उचित घटाव करके है। तो यह कुंजीपटल और KEYUP घटनाओं का पता लगाने के लिए पर्याप्त होगा।

ऐसे this one या this one रूप अतः एक भी कुंजी दबाने का पता लगाने के विषय में पर या एकल वर्ण इनपुट का पता लगाने के बारे में सवाल और जवाब,, जो दोनों getch के कुछ फार्म का उपयोग की एक विस्तृत विविधता हैं। मैंने पाइथन श्राप लाइब्रेरी को देखा है, और जो मैं मुख्य पहचान के प्राथमिक रूप को बता सकता हूं, वह सिंगल-कैरेक्टर गेट() के रूप में भी है। लेकिन इन्हें कीप्रेस की लंबाई का पता नहीं लगाया जाता है --- वे केवल कुंजी का पता लगाते हैं।

मैं स्वीकार करते हैं कि एक कुंजी दबाने की लंबाई का पता लगाने के जुआ खेलने में एक आवश्यक कार्य है, और इसलिए मैं उम्मीद करते हैं कि pygame कुंजी दबाने अवधि का पता लगाने के तरीकों है। लेकिन मुझे उम्मीद है कि कुंजीपटल अवधि का पता लगाने के लिए बहुत पतली और अधिक सीधी लाइब्रेरी का उपयोग करना संभव है।

+0

पायगैम में 'कुंजीडाउन' और 'कुंजीप्यू' ईवेंट है ताकि आप दोनों समय निकाल सकें और घटा सकें। – furas

+0

सभी 'GUI 'में' कुंजीडाउन 'और' KEYUP 'ईवेंट प्राप्त करने के तरीके हो सकते हैं। – furas

+0

क्या मेरे उत्तर के साथ कुछ गलत है? :) –

उत्तर

1

का उपयोग pynput मॉड्यूल: (सर्वश्रेष्ठ)

आप इस कोड का उपयोग कर सकते हैं:

from pynput import keyboard 
import time 

def callb(key): #what to do on key-release 
    ti1 = time.time() - t 
    ti1 = str(ti1) #converting float value to string 
    ti2 = ti1[0:5] #cutting the seconds (time) , without it , it will print like 0.233446546 
    print("The key",key,"Pressed For",ti2,'seconds') 
    return False #stop detecting more key-releases 
def callb1(key): #what to do on key-press 
    return False #stop detecting more key-presses 

with keyboard.Listener(on_press = callb1) as listener1: #setting code for listening key-press 
    listener1.join() 

t = time.time() 

with keyboard.Listener(on_release = callb) as listener: #setting code for listening key-release 
    listener.join() 

नोट:

मैं कर रहा हूँ अगर यकीन नहीं pynput निर्मित मॉड्यूल है, यदि आप ModuleNotFoundError प्राप्त फिर इसे स्थापित करने के लिए pip का उपयोग करें:
pip install pynput

का उपयोग pygame: (अच्छा)

import time 
import pygame 
import os 
os.environ["SDL_VIDEO_CENTERED"] = "1" 

screen = pygame.display.set_mode((600, 600)) 
pygame.display.set_caption("Time") 
clock = pygame.time.Clock() 

pygame.init() 

clock = pygame.time.Clock() 

running = True  
while running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
      pygame.quit() 
      break 
     if event.type == pygame.KEYDOWN: 
      # detect key 'a' 
      if event.key == pygame.K_a: # key 'a' 
       t = time.time() 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_a: # key 'a' 
       t = time.time() - t; t = str(t); t = t[:5] 
       print("You pressed key 'a' for",t,'seconds') 


     screen.fill((255, 255, 255)) 
     pygame.display.update() 

     clock.tick(40) 

नोट:

यह केवल कुंजी है कि आप कोड में लिखेंगे की पहचान करेगा।