инструкция pygame не работает без создания окна [duplicate]

Я нашел это для себя: datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());

и, вероятно, для вас: datePickerDialog.getDatePicker().updateDate(year, month - 1, day);

является виновником. Если вы оставите эту строку, у вас не будет названия.

Я изучаю настройку конкретной темы для решения проблемы.

- ОБНОВЛЕНИЕ -

Убедитесь, что вы вызываете .setTitle(""); ПОСЛЕ того, как вы вызываете .getDatePicker().x(). Иначе это не сработает.

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

5 ответов

Единственный способ обнаружить события мыши вне вашей программы - установить крюк 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 Extensions для Python. [...] При запуске эта программа просто сидит без дела и ждет событий Windows. Если вы используете инструментарий GUI (например, wxPython), этот цикл не нужен, поскольку набор инструментов предоставляет свои собственные.

29
ответ дан Tobias Kienzler 18 August 2018 в 03:06
поделиться
  • 1
    Обратите внимание, что PyHook довольно часто перемещался между sourceforge.net/projects/pyhook – Tobias Kienzler 15 December 2016 в 08:35
  • 2
    Если вы хотите выйти из библиотеки ctypes, а затем выполнить в любом месте текущего потока: ctypes.windll.user32.PostQuitMessage(0) Это закончится pythoncom.PumpMessages() – Diego Orellana 16 November 2017 в 23:15

С тех пор, как был задан этот вопрос, прошла жаркая минута, но я решил поделиться своим решением: я просто использовал встроенный модуль ctypes. (Я использую Python 3.3 btw)

import ctypes
import time

def DetectClick(button, watchtime = 5):
    '''Waits watchtime seconds. Returns True on click, False otherwise'''
    if button in (1, '1', 'l', 'L', 'left', 'Left', 'LEFT'):
        bnum = 0x01
    elif button in (2, '2', 'r', 'R', 'right', 'Right', 'RIGHT'):
        bnum = 0x02

    start = time.time()
    while 1:
        if ctypes.windll.user32.GetKeyState(bnum) not in [0, 1]:
            # ^ this returns either 0 or 1 when button is not being held down
            return True
        elif time.time() - start >= watchtime:
            break
        time.sleep(0.001)
    return False
3
ответ дан diligar 18 August 2018 в 03:06
поделиться

Я использую win32api. Он работает при нажатии на любое окно.

# Code to check if left or right mouse buttons were pressed
import win32api
import time

state_left = win32api.GetKeyState(0x01)  # Left button down = 0 or 1. Button up = -127 or -128
state_right = win32api.GetKeyState(0x02)  # Right button down = 0 or 1. Button up = -127 or -128

while True:
    a = win32api.GetKeyState(0x01)
    b = win32api.GetKeyState(0x02)

    if a != state_left:  # Button state changed
        state_left = a
        print(a)
        if a < 0:
            print('Left Button Pressed')
        else:
            print('Left Button Released')

    if b != state_right:  # Button state changed
        state_right = b
        print(b)
        if b < 0:
            print('Right Button Pressed')
        else:
            print('Right Button Released')
    time.sleep(0.001)
13
ответ дан Markacho 18 August 2018 в 03:06
поделиться

Способ работы с окнами - обрабатывать сообщение WM_LBUTTONDBLCLK.

Чтобы это послать, ваш класс окна должен быть создан с помощью стиля класса CS_DBLCLKS.

Боюсь, я не знаю, как применить это в Python , но, надеюсь, это может дать вам несколько советов.

2
ответ дан MrZebra 18 August 2018 в 03:06
поделиться
Другие вопросы по тегам:

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