我知道这是一个模糊的问题,但我希望得到一些帮助。我非常了解VBA,并且能够在python中完成一些简单的任务以及R中的统计编程语言。
我要做的是创建一个简单的应用程序,让我捕获数据,其中一些是从键盘捕获的。每次有击键时,我都想在我的数据集中创建一条新记录。
在某些情况下,考虑创建一个简单的界面,让我跟踪NHL曲棍球比赛中冰球的位置(和持续时间)。
我不是一个真正的程序员,但知道足以遇到麻烦,我不确定从哪里开始。我只是在寻找一些关于非常基本(非商业)解决方案的想法。
非常感谢提前。
编辑:我想捕捉每个区域冰球的持续时间。我打算使用方向键左/右“跟随”从区域到每个的冰球。每次冰球变为区域时,我想“关闭”活动记录并开始新记录。开始和结束时间将让我计算冰球在区域中的时间。我还需要一种方法来停止创建一个新的记录,比如对决,电视超时和结束时间。我打算使用空格键。我的想法是,如果我这样做是正确的,当我跟随时,记录的时间应与在电视上找到的游戏时钟上发布的内容相匹配。是的,这是一个疯狂的想法。答案 0 :(得分:1)
如果您选择使用Python编程:
您可以使用pygame包轻松捕获键盘事件。该库是为编写游戏而构建的,但可能会为您提供keydown / keyup事件所需的功能。它还处理鼠标事件(因为它适用于游戏)具有图形/文本的功能。文档非常好,它是跨平台的。一个可能的缺点是你必须有一个“屏幕”,它必须有焦点。这是一个小例子:
import pygame
def main():
"""
Pygame Example
"""
pygame.init()
screen = pygame.display.set_mode((200, 200))
app_running = True
while app_running:
# Get all key/mouse events from system.
events = pygame.event.get()
# Loop thru each event...
for e in events:
# Handle when the program is killed.
if e.type == pygame.QUIT:
app_running = False
break
# Handle key events.
elif e.type == pygame.KEYDOWN:
# Exit if escape is pressed.
if e.key == pygame.K_ESCAPE:
app_running = False
# Do something when the right arrow
# is pressed.
elif e.key == pygame.K_RIGHT:
print "right arrow pressed"
# Do something when the left arrow
# is pressed.
elif e.key == pygame.K_LEFT:
print "left arrow pressed"
# and so on ...
# Fill the screen to blank it.
#screen.fill(mycolor)
# Write someting to the screen to display.
#screen.blit(some_image, some_position)
# Flip to display.
#screen.flip()
pygame.quit()
if __name__ == '__main__':
main()
如果您使用的是Windows版本,则可以使用msvcrt
库,但事件处理不如pygame
那么好:您必须处理原始键盘输出而不是事件有点不太直观。以下是来自Robert Gillies on ActiveState的小代码段:
import msvcrt
def funkeypress():
"""
Waits for the user to press any key including function keys. Returns
the ascii code for the key or the scancode for the function key.
"""
while 1:
if msvcrt.kbhit(): # Key pressed?
a = ord(msvcrt.getch()) # get first byte of keyscan code
if a == 0 or a == 224: # is it a function key?
b = ord(msvcrt.getch()) # get next byte of key scan code
x = a + (b*256) # cook it.
return x # return cooked scancode
else:
return a # else return ascii code
答案 1 :(得分:0)
在R中查看scan()键盘输入。你没有询问鼠标输入,但考虑了locator()。
如果您想立即输出,请将其置于循环中。
答案 2 :(得分:0)
您是否有必要自己编程?有一个名为jwatcher的免费程序,旨在评估道德研究中的动物行为。看起来这很适合你的任务。