简单的UI来捕获数据

4 投票
3 回答
1145 浏览
提问于 2025-04-16 14:17

我知道这个问题有点模糊,但我希望能得到一些帮助。我对VBA比较熟悉,也能在Python和统计编程语言R中完成一些简单的任务。

我想做的是创建一个简单的应用程序,让我能够捕捉数据,其中一些数据是通过键盘输入的。每当我按下一个键时,我想在我的数据集中创建一个新的记录。

为了让你更好理解,可以想象一下,创建一个简单的界面来跟踪NHL冰球比赛中冰球的位置(以及停留的时间)。

我并不是一个真正的程序员,但我知道一些基础知识,足以让我遇到麻烦,而且我不太确定从哪里开始。我只是想要一些关于一个非常基础(非商业性)解决方案的想法。

非常感谢你的帮助。

补充说明:我想记录冰球在每个区域停留的时间。我打算使用方向键左右来“跟踪”冰球从一个区域到另一个区域。每当冰球切换到一个新区域时,我想“关闭”当前记录并开始一个新的记录。开始和结束的时间可以让我计算冰球在该区域停留了多久。我还需要一种方法来停止记录,比如在面对面时、电视暂停时和比赛结束时。我打算使用空格键。我的想法是,如果我这样做正确,当我跟踪的时候,记录的时间应该和电视上显示的比赛时钟一致。是的,这个想法有点疯狂。

3 个回答

0

在R语言中,可以使用scan()函数来获取键盘输入。如果你想要处理鼠标输入,虽然你没有问,但可以考虑使用locator()这个函数。

如果你想要立即看到输出,可以把它放在一个循环里。

0

你真的需要自己编程吗?有一个免费的程序叫做 jwatcher,这个程序是专门用来在动物行为研究中打分的。听起来这个程序很适合你的需求。

1

如果你选择用Python编程:

你可以使用pygame这个库来轻松捕捉键盘事件。这个库是为了写游戏而开发的,但它能满足你对按键按下和抬起事件的需求。它还可以处理鼠标事件,并且因为是为游戏设计的,所以也能处理图形和文字。这个库的文档非常好,而且可以在不同的操作系统上使用。一个可能的缺点是,你必须有一个“屏幕”,而且这个屏幕必须处于活动状态。下面是一个简单的例子:

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在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

撰写回答