qsilderbutton.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 ################################################################################
3 #
4 # Copyright Airbus Group SAS 2015
5 # All rigths reserved.
6 #
7 # File Name : qsilderbutton.py
8 # Authors : Martin Matignon
9 #
10 # If you find any bug or if you have any question please contact
11 # Adolfo Suarez Roos <adolfo.suarez@airbus.com>
12 # Martin Matignon <martin.matignon.external@airbus.com>
13 #
14 #
15 ################################################################################
16 
17 import rospy
18 
19 from python_qt_binding.QtGui import *
20 from python_qt_binding.QtCore import *
21 
22 ## @package: qsilderbutton
23 ##
24 ## @version 2.0
25 ## @author Matignon Martin
26 ## @date Last modified 04/03/2014
27 ## @class QPopup
28 ## @brief Slider button object.
29 class QSilderButton(QLabel):
30 
31  TRIGGER = 'statusChanged'
32 
33  ON_CSS = "QLabel {background-color: qlineargradient(x1:0.5, y1:0.994318, \
34  x2:0.507752, y2:0, \
35  stop:0 rgba(51,166,255,255), \
36  stop:1 rgba(51,166,255,150)); \
37  border: 1px solid black; \
38  border-radius: 5px; \
39  font-size: %ipt; \
40  color: #ffffff; \
41  qproperty-alignment: AlignCenter;}"
42 
43  OFF_CSS = "QLabel {background-color: qlineargradient(x1:0.5, y1:0.994318, \
44  x2:0.507752, y2:0, \
45  stop:0 rgba(146,146,146,255), \
46  stop:1 rgba(146,146,146,150)); \
47  border: 1px solid black; \
48  border-radius: 5px; \
49  font-size: %ipt; \
50  color: #ffffff; \
51  qproperty-alignment: AlignCenter;}"
52 
53 
54  def __init__(self,parent=None, status=False, on_label='ON', off_label='OFF'):
55  """! The constructor.
56  @param parent: object parent.
57  @type parent: QObject.
58 
59  @param status: button status (False = off/ True = on).
60  @type status: bool.
61  """
62 
63  QLabel.__init__(self, parent)
64 
65  self._on_label = on_label
66  self._off_label = off_label
67  self._th_off = None
68  self._th_on = None
69  self._on = None
70  self._off = None
71  self._stick_off = None
72  self._stick_on = None
73  self._pressed = False
74 
75 
76  self.setStyleSheet("QLabel {background-color:#646464;\
77  border: 1px solid black;\
78  border-radius: 5px;}")
79 
80  self._trigger = QLabel(self)
81  self._trigger.setMouseTracking(True)
82 
83  self._trigger.resize(self.width()/2+1,self.height())
84  self._th_off = self._trigger.width()/2
85  self._th_on = self._th_off+1
86  self._on = self.width()-self._trigger.width()
87  self._off = 0
88  self._stick_off = int(0.3*self._on)
89  self._stick_on = int(2*self._stick_off)
90 
91  if status == True:
92  self._trigger.setStyleSheet(self.ON_CSS %(self.height()/4))
93  self._trigger.setText(self._on_label)
94  self._trigger.move(self._on,self._trigger.y())
95  else:
96  self._trigger.setStyleSheet(self.OFF_CSS %(self.height()/4))
97  self._trigger.setText(self._off_label)
98 
99  def get_status(self):
100  """! Get button status.
101  @param status: button status.
102  @type parent: bool.
103  """
104  if self._trigger.x() < self._th_off:
105  return False
106  else:
107  return True
108 
109  def set_status(self, status):
110  """! Set button status.
111  @return status: button status (False = off/ True = on).
112  @type status: bool.
113  """
114  if status:
115  self._trigger.move(self._on,self._trigger.y())
116  self._trigger.setStyleSheet(self.ON_CSS %(self.height()/4))
117  self._trigger.setText(self._on_label)
118  self.emit(SIGNAL('statusChanged'), True)
119  else:
120  self._trigger.move(self._off,self._trigger.y())
121  self._trigger.setStyleSheet(self.OFF_CSS %(self.height()/4))
122  self._trigger.setText(self._off_label)
123  self.emit(SIGNAL('statusChanged'), False)
124 
125  def mousePressEvent(self, event):
126  """! Detect button pressed.
127  @param event: event.
128  @type event: QEvent.
129  """
130  self._pressed = True
131 
132  def mouseReleaseEvent(self, event):
133  """! Detect button released.
134  @param event: event.
135  @type event: QEvent
136  """
137  self._pressed = False
138 
139  x = event.pos().x() - self._trigger.width()/2
140 
141  if x >= self._th_on:
142  self._trigger.move(self._on,self._trigger.y())
143  self._trigger.setStyleSheet(self.ON_CSS %(self.height()/4))
144  self._trigger.setText(self._on_label)
145  elif x <= self._th_off:
146  self._trigger.move(self._off,self._trigger.y())
147  self._trigger.setStyleSheet(self.OFF_CSS %(self.height()/4))
148  self._trigger.setText(self._off_label)
149 
150  self.emit(SIGNAL('statusChanged'),self.get_status())
151 
152  def mouseMoveEvent(self, event):
153  """! Detect button moved.
154  @param event: event.
155  @type event: QEvent
156  """
157 
158  x = event.pos().x() - self._trigger.width()/2
159  if self._pressed and x >= self._off and x <= self._on:
160  if x > self._stick_on:
161  self._trigger.move(self._on,self._trigger.y())
162  self._trigger.setStyleSheet(self.ON_CSS %(self.height()/4))
163  self._trigger.setText(self._on_label)
164  elif x < self._stick_off:
165  self._trigger.move(self._off,self._trigger.y())
166  self._trigger.setStyleSheet(self.OFF_CSS %(self.height()/4))
167  self._trigger.setText(self._off_label)
168  else:
169  self._trigger.move(x,self._trigger.y())
170 
171  def resizeEvent(self,event):
172  """! Resize button.
173  @param event: event.
174  @type event: QEvent
175  """
176 
177  if self.width() % 2 == 0:
178  self.resize(self.width()+1,self.height())
179  else:
180  self.resize(self.width(),self.height())
181 
182  if self.get_status():
183  self._trigger.setStyleSheet(self.ON_CSS %(self.height()/4))
184  else:
185  self._trigger.setStyleSheet(self.OFF_CSS %(self.height()/4))
186 
187  self._trigger.resize(self.width()/2+1,self.height())
188  self._th_off = self._trigger.width()/2
189  self._th_on = self._th_off+1
190  self._on = self.width()-self._trigger.width()
191  self._off = 0
192  self._stick_off = int(0.3*self._on)
193  self._stick_on = int(2*self._stick_off)
194 
195  if self._trigger.x() != 0:
196  self._trigger.move(self._on,self._trigger.y())
197 
198 
199 #End of file


airbus_cobot_gui
Author(s):
autogenerated on Thu Dec 17 2015 11:42:05