Обнаружение Щелчков мышью в окнах с помощью Python

Если вы намереваетесь сгенерировать много диаграмм в R, возможно, стоит потратить время на изучение использования пакета ggplot (ggplot2). Хотя есть некоторая кривая обучения, она гораздо более гибкая и позволяет создавать очень профессионально выглядящую графику.

Вот решение, которое использует ggplot.

df <- data.frame(
    word1 = c(sample(LETTERS[1:5], 10, replace = T)),
    word2 = c(sample(LETTERS[1:5], 10, replace = T)),
    word3 = c(sample(LETTERS[1:5], 10, replace = T)),
    word4 = c(sample(LETTERS[1:5], 10, replace = T)),
    word5 = c(sample(LETTERS[1:5], 10, replace = T)),
    dur1 = c(round(abs(rnorm(10)),2)),
    dur2 = c(round(abs(rnorm(10)),2)),
    dur3 = c(round(abs(rnorm(10)),2)),
    dur4 = c(round(abs(rnorm(10)),2)),
    dur5 = c(round(abs(rnorm(10)),2))
)
df
# convert words to character:
df[,1:5] <- lapply(df[,1:5], as.character)
targets <- c("A", "C", "E")
word1to4 <- c(df$word1[df$word1 %in% targets], df$word2[df$word2 %in% targets], df$word3[df$word3 %in% targets],
              df$word4[df$word4 %in% targets])
dur1to4 <- c(df$dur1[df$word1 %in% targets], df$dur2[df$word2 %in% targets], df$dur3[df$word3 %in% targets],
             df$dur4[df$word4 %in% targets])

word5 <- df$word5[df$word5 %in% targets]
dur5 <- df$dur5[df$word5 %in% targets]

# Create Dataset to plot
library(ggplot2)

box_data<-data.frame(words=c(word1to4,word5),dur=c(dur1to4,dur5),
                     type=c(rep("1 to 4",length(word1to4)),rep("5",length(word5))))

box_data$type<-as.factor(box_data$type)
box_data$x<-interaction(box_data$words, box_data$type)

box_data$xc<-as.character(box_data$x)
box_data<-box_data[order(box_data$xc),]
box_data
my_boxplot<-ggplot(box_data, aes(x=xc, y=dur)) + geom_boxplot(aes(fill=type)) +
theme(legend.position = "top", legend.title = element_blank(), plot.title = element_text(hjust = 0.5)) +
ggtitle("Duration By Word and Type")

my_boxplot

enter image description here

21
задан monkut 3 October 2008 в 07:47
поделиться

3 ответа

Единственный способ обнаружить события от нажатия мыши вне Вашей программы состоит в том, чтобы установить рычаг Windows с помощью SetWindowsHookEx. модуль pyHook инкапсулирует детали основных элементов. Вот образец, который распечатает местоположение каждого щелчка мышью:

import pyHook
import pythoncom

def onclick(event):
    print event.Position
    return True

hm = pyHook.HookManager()
hm.SubscribeMouseAllButtonsDown(onclick)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()

можно проверить сценарий example.py , который установлен с модулем для большего количества информации о параметр события .

pyHook мог бы быть хитрым для использования в чистом сценарии Python, потому что он требует активного насоса сообщения. От учебное руководство :

Любое приложение, которое хочет получить уведомления о глобальных входных событиях, должно иметь насос сообщения Windows. Самый легкий способ получить один из них состоит в том, чтобы использовать метод PumpMessages в пакете Расширений Win32 для Python. [...], Когда выполнено, эта программа просто простаивает и ожидает событий Windows. При использовании инструментария GUI (например, wxPython), этот цикл является ненужным, так как инструментарий обеспечивает свое собственное.

31
ответ дан 29 November 2019 в 06:44
поделиться

Windows MFC, включая программирование GUI, доступен с Python с помощью Python для расширений Windows Mark Hammond. Книжная Выборка O'Reilly от Hammond и Robinson книга показывает, как сцепить сообщения мыши, .e.g:

self.HookMessage(self.OnMouseMove,win32con.WM_MOUSEMOVE)

Необработанный MFC не легок или очевиден, но поиск сети для примеров Python может привести к некоторым применимым примерам.

4
ответ дан 29 November 2019 в 06:44
поделиться

Окна способ сделать это должно обработать эти WM_LBUTTONDBLCLK сообщение.

Для этого, чтобы быть отправленным, Ваш класс окна должен быть создан с CS_DBLCLKS стиль класса.

я боюсь, что не знаю, как применить это в Python, но надо надеяться он мог бы дать Вам некоторые подсказки.

2
ответ дан 29 November 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: