Пример #1
0
class SearchEdit(QLineEdit):
    '''
    SearchEdit
    
    Styled search edit box which includes a search icon, clear button, and
    pre-defined preview text.
    '''
    def __init__(self, parent=None):
        super(SearchEdit, self).__init__(parent)
        
        clr_pixmap = QPixmap(':/icons/clear.png')
        self._btn_clear = QToolButton(self)
        self._btn_clear.setIcon(clr_pixmap)
        self._btn_clear.setIconSize(clr_pixmap.size())
        self._btn_clear.setCursor(Qt.ArrowCursor)
        self._btn_clear.setStyleSheet('QToolButton { border: none; padding: 0px; }');
        self._btn_clear.clicked.connect(self.clear)
        fw = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
        
        #TODO: Make a Search glyph show up properly
        self.setStyleSheet('QLineEdit { padding-right: %dpx; }' % (self._btn_clear.sizeHint().width() + fw + 1))
        msz = self.minimumSizeHint()
        self.setMinimumSize(max([msz.width(), self._btn_clear.sizeHint().height() + fw * 2 + 2]), 
                            max([msz.height(), self._btn_clear.sizeHint().height() + fw * 2 + 2]))
        self.setPlaceholderText('Search')
    
    def resizeEvent(self, e):
        sz = self._btn_clear.sizeHint()
        fw = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
        self._btn_clear.move(self.rect().right() - fw - sz.width(),
            (self.rect().bottom() + 1 - sz.height()) / 2 + 1)
        
    def sizeHint(self):
        s = super(SearchEdit, self).sizeHint()
        s.setWidth(250)
        return s