Guest User

fullptqt4code

a guest
Mar 19th, 2020
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.95 KB | None | 0 0
  1. import sys
  2. from PyQt4.QtCore import Qt
  3. from PyQt4.QtCore import QRectF
  4. from PyQt4.QtWidgets import QApplication
  5. from PyQt4.QtGui import QColor
  6. from PyQt4.QtGui import QFont
  7. from PyQt4.QtGui import QPainter
  8. from PyQt4.QtGui import QPixmap
  9. from PyQt4.QtGui import QTextOption
  10. from PyQt4.QtGui import QToolTip
  11. from PyQt4.QtGui import QWidget
  12.  
  13.  
  14. class AreaSelector(QWidget):
  15.    
  16.     def __init__(self, parent=None):
  17.        
  18.         QWidget.__init__(self, None, Qt.FramelessWindowHint)
  19.         self.setAttribute(Qt.WA_TranslucentBackground)
  20.         self.setAttribute(Qt.WA_DeleteOnClose)
  21.         self.setWindowState(Qt.WindowFullScreen)
  22.         self.setAutoFillBackground(False)
  23.  
  24.         self.parent = parent
  25.         self.start_x = 0
  26.         self.start_y = 0
  27.         self.end_x = 0
  28.         self.end_y = 0
  29.         self.current_x = 0
  30.         self.current_y = 0
  31.  
  32.     def showEvent(self, event):
  33.        
  34.         self.bg = QPixmap.grabWindow(QApplication.desktop().winId())
  35.         self.screen_geometry = QApplication.desktop().screenGeometry(self)
  36.  
  37.     def mousePressEvent(self, event):
  38.        
  39.         self.start_x = event.globalX()
  40.         self.start_y = event.globalY()
  41.  
  42.     def mouseReleaseEvent(self, event):
  43.        
  44.         self.end_x = event.globalX()
  45.         self.end_y = event.globalY()
  46.     def mouseMoveEvent(self, event):
  47.        
  48.         self.current_x = event.globalX()
  49.         self.current_y = event.globalY()
  50.         self.repaint()
  51.  
  52.         text = "Start: %sx%s \nEnd: %sx%s" % (self.start_x, self.start_y, self.current_x, self.current_y)
  53.         QToolTip.showText(event.pos(), text)
  54.  
  55.     def keyPressEvent(self, event):
  56.         if event.key() == Qt.Key_Return:
  57.             self._acceptSelection()
  58.         elif event.key() == Qt.Key_Escape:
  59.             self.close()
  60.  
  61.     def _acceptSelection(self):
  62.        
  63.         if self.parent is not None:
  64.             self.parent.areaSelectEvent(self.start_x, self.start_y, self.end_x, self.end_y)
  65.         self.close()
  66.  
  67.     def paintEvent(self, event):
  68.      
  69.         painter = QPainter()
  70.         painter.begin(self)
  71.  
  72.         painter.fillRect(self.screen_geometry, QColor(10, 10, 10, 125))
  73.  
  74.         self._paint_selection(painter)
  75.         self._paint_usage_text(painter)
  76.         painter.end()
  77.  
  78.    
  79.     def _paint_usage_text(self, painter):
  80.        
  81.         font = QFont("Helvetica [Cronyx]", 26, QFont.Bold)
  82.         painter.setFont(font)
  83.         painter.setPen(QColor(255, 255, 255, 255))
  84.  
  85.      
  86.         screen_width = self.screen_geometry.width()
  87.         text_width = 800
  88.         text_start_x = screen_width / 2 - text_width / 2
  89.  
  90.        
  91.         screen_height = self.screen_geometry.height()
  92.         text_height = 200
  93.         text_start_y = screen_height / 2 - text_height / 2
  94.  
  95.         textoption = QTextOption(Qt.AlignCenter)
  96.         textbox = QRectF(text_start_x, text_start_y, text_width, text_height)
  97.         painter.drawText(textbox,
  98.             "Click & Drag to select an area\n"
  99.             "ENTER to confirm or ESC to cancel",
  100.             textoption)
  101.         painter.drawRoundedRect(textbox, 20, 20)
  102.  
  103.     def _paint_selection(self, painter):
  104.         '''Draws the current user selection'''
  105.         rectangle = QRectF()
  106.  
  107.        
  108.         if self.start_x > self.current_x:
  109.             rectangle.setLeft(self.current_x)
  110.             rectangle.setRight(self.start_x)
  111.        
  112.         else:
  113.             rectangle.setLeft(self.start_x)
  114.             rectangle.setRight(self.current_x)
  115.  
  116.        
  117.         if self.start_y > self.current_y:
  118.             rectangle.setTop(self.current_y)
  119.             rectangle.setBottom(self.start_y)
  120.  
  121.        
  122.         else:
  123.             rectangle.setTop(self.start_y)
  124.             rectangle.setBottom(self.current_y)
  125.  
  126.         painter.drawPixmap(rectangle, self.bg, rectangle)
  127.         painter.drawRect(rectangle)
  128.  
  129.  
  130.  
  131. if __name__ == "__main__":
  132.     app = QApplication(sys.argv)
  133.     main = AreaSelector()
  134.     main.show()
  135.     sys.exit(app.exec_())
Add Comment
Please, Sign In to add comment