简单的用户界面用于捕获数据

4
我知道这个问题比较模糊,但是我希望能得到一些帮助。我对VBA非常熟悉,并且也能够使用Python和R这两种统计编程语言完成一些简单的任务。
我想要创建一个简单的应用程序,它可以让我捕获数据,其中一些数据是从键盘捕获的。每次有按键输入时,我都希望在我的数据集中创建一个新记录。
为了有所了解,可以想象一下创建一个简单的界面,用于跟踪NHL曲棍球比赛中冰球的位置(和持续时间)。
我不是一个真正的程序员,只是知道足够的东西来自找麻烦,而且不确定从哪里开始。我只是希望能够得到一些关于非商业解决方案的基本思路。
提前感谢您的帮助。
编辑:我想捕获冰球在每个区域内停留的时间。我打算使用左/右方向键来“跟随”冰球从一个区域到另一个区域。每当冰球转移到另一个区域时,我都希望“关闭”活动记录并开始一个新记录。起始和结束时间将使我能够计算冰球在该区域停留的时间。我还需要一种方法来停止为faceoffs,电视暂停和周期结束等事物创建新记录。我打算使用空格键。我的想法是,如果我做得正确,在跟随的过程中,记录的时间应该与电视上显示的比赛时钟匹配。是的,这是一个疯狂的想法。

1
你能否提供更多关于所需捕获的数据类型以及所希望发生的情况的细节?您想捕获任何类型的键盘输入,还是特定的字母? - please delete me
是的,理想情况下我可以使用箭头键,但如果需要的话我可能会适应它。 - Btibert3
3个回答

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

0

在R中查看scan()以获取键盘输入。虽然您没有询问鼠标输入,但可以考虑使用locator()。

如果您想要立即输出,请将其放入循环中。


没想到使用scan。你能给我一个如何使用scan捕获左右箭头的例子吗?谢谢。 - Btibert3

0

你必须亲自编程吗?有一个免费的程序叫做jwatcher,专门用于评分动物行为的行为学研究。看起来这个程序非常适合你的任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接