Простой интерфейс для сбора данных - PullRequest
4 голосов
/ 23 марта 2011

Я знаю, что это неопределенный вопрос, но я надеялся получить помощь.Я достаточно хорошо знаю VBA и смог выполнить несколько простых задач на python, а также язык статистического программирования на R.

Я хочу создать простое приложение, которое позволит мне собирать данные,часть из которых захвачена с клавиатуры.Каждый раз, когда происходит нажатие клавиши, я хотел создать новую запись в своем наборе данных.

Для некоторого контекста подумайте о создании простого интерфейса, который позволит мне отслеживать местоположение (и продолжительность) шайбы в НХЛхоккейная игра.

Я не совсем программист, но знаю достаточно, чтобы попасть в беду, и не совсем уверен, с чего начать.Я просто ищу некоторые мысли относительно очень простого (некоммерческого) решения.

Заранее большое спасибо.

РЕДАКТИРОВАТЬ: Я хочу захватить, как долго шайба каждой зоны.Я планирую использовать клавиши направления влево / вправо, чтобы «следовать» шайбе из зоны в каждую.Каждый раз, когда шайба меняется на зону, я хочу «закрыть» активную запись и начать новую.Время начала и окончания позволит мне рассчитать, как долго шайба находилась в зоне.Мне также нужен способ остановить создание новой записи для таких вещей, как вбрасывание, тайм-ауты ТВ и конец периода.Я планировал использовать пробел.Я думаю, что если я сделаю это правильно, то, когда я буду следовать, записанное время должно совпадать с тем, что указано на игровых часах, показанных по телевизору.Да, это безумная идея.

Ответы [ 3 ]

1 голос
/ 25 марта 2011

Если вы решили программировать на 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: вместо событий вам приходится иметь дело с необработанным выводом клавиатуры, а это немного меньше интуитивный. Вот небольшой фрагмент кода от Роберта Джиллиса в 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 голосов
/ 24 марта 2011

Нужно ли программировать это самостоятельно?Существует бесплатная программа под названием jwatcher , предназначенная для оценки поведения животных в этологических исследованиях.Кажется, что это будет хорошо для вашей задачи.

0 голосов
/ 24 марта 2011

Посмотрите на scan () для ввода с клавиатуры в R. И вы не спрашивали о вводе с помощью мыши, но рассмотрите для этого локатор ().

Поместите это в цикл, если вы хотите немедленный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...