Я нашел это для себя: datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
и, вероятно, для вас: datePickerDialog.getDatePicker().updateDate(year, month - 1, day);
является виновником. Если вы оставите эту строку, у вас не будет названия.
Я изучаю настройку конкретной темы для решения проблемы.
- ОБНОВЛЕНИЕ -
Убедитесь, что вы вызываете .setTitle("");
ПОСЛЕ того, как вы вызываете .getDatePicker().x()
. Иначе это не сработает.
Единственный способ обнаружить события мыши вне вашей программы - установить крюк 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), этот цикл не нужен, поскольку набор инструментов предоставляет свои собственные.
blockquote>
С тех пор, как был задан этот вопрос, прошла жаркая минута, но я решил поделиться своим решением: я просто использовал встроенный модуль 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
Windows MFC, включая графическое программирование, доступна с помощью python с помощью расширений Python для Windows от Mark Hammond. Извлечение книги О'Рейли из книги Хэммонда и Робинсона показывает, как перехватывать сообщения мыши, .eg:
self.HookMessage(self.OnMouseMove,win32con.WM_MOUSEMOVE)
Raw MFC непросто или очевидным, но поиск в Интернете для примеров python может привести к некоторым полезным примерам.
Я использую 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)
Способ работы с окнами - обрабатывать сообщение WM_LBUTTONDBLCLK
.
Чтобы это послать, ваш класс окна должен быть создан с помощью стиля класса CS_DBLCLKS
.
Боюсь, я не знаю, как применить это в Python , но, надеюсь, это может дать вам несколько советов.
ctypes
, а затем выполнить в любом месте текущего потока:ctypes.windll.user32.PostQuitMessage(0)
Это закончитсяpythoncom.PumpMessages()
– Diego Orellana 16 November 2017 в 23:15