usr bin env python coding UTF-8 import sys os from PyQt4 QtCore import

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys, os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
########################################################################
class MyWidget(QWidget):
""""""
#----------------------------------------------------------------------
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)
'''виджет сначала делается главой иерархии объектов
(прошу поправить, если не прав)'''
self.title = QString()
self.x_coord = 0
'''создаем пару переменных, хранящих заголовок текушего трека
и (важно) координату указателя мыши в момент щелчка'''
self.setWindowFlags(Qt.Dialog)
'''мелочь - то, что делает появление окошка
по центру окна, а не где придется'''
#----------------------------------------------------------------------
def event (self, event):
if event.type() == QEvent.MouseButtonPress:
''' ОТЛИЧИЕ: теперь мы идентифицируем события не по имени, а по типу'''
self.x_coord = event.pos().x()
''' запоминаем "начальную" координату '''
event.accept()
''' ОТЛИЧИЕ: уставливает флаг, указывающий, что событие обработано.
Если не поставите - событие дополнительно обработается стандартно. '''
elif event.type() == QEvent.MouseButtonRelease:
if self.x_coord < event.pos().x():
'''извлекаем текущую и сравнивая, выясняем, куда мышь двигалась'''
os.system('mpc next')
'''Здесь и далее простите меня за os.system,
но биндингов для mpd я не нашел, а так - хоть и не Ъ,
но работает и не засоряет пример.'''
self.update()
elif self.x_coord > event.pos().x():
os.system('mpc prev')
self.update()
else:
os.system('mpc toggle')
self.update()
event.accept()
elif event.type() == QEvent.Paint:
''' При отображении виджета мы считываем
название трека и отрисовываем его'''
self.title = os.popen('mpc').read()
painter = QPainter(self)
painter.setRenderHint(QPainter.TextAntialiasing)
painter.drawText(self.rect(), Qt.AlignCenter, self.title)
event.accept()
''' ОТЛИЧИЕ: обеспечивает нормальную обработку остальных событий
(вы же не определяли обработчик события создания виджета),
поэтому возвращение просто обязательно'''
return QWidget.event(self, event)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = MyWidget()
form.show()
app.exec_()