[PySide] search widget

Sebastian Elner sebastian at risefx.com
Thu Jun 7 10:45:24 CEST 2012


This is the search line edit class I use. The only thing to do is pass 
the SearchLineEdit two valid pixmaps for the icons. I use the icons from 
the tango desktop project. Notice that you can easily make the magnifier 
icon a button with a menu, to have the user select the "search engine" 
(uncomment the lines below). Tested with PyQt only.

from PySide import QtCore, QtGui

class SearchLineEdit(QtGui.QLineEdit):

     def __init__(self, searchPixmap, clearPixmap, parent = None):
         QtGui.QLineEdit.__init__(self, parent)

         self.clearButton = QtGui.QToolButton(self)
         self.clearButton.setIcon(QtGui.QIcon(clearPixmap))
         self.clearButton.setIconSize(clearPixmap.size())
         self.clearButton.setCursor(QtCore.Qt.ArrowCursor)
         self.clearButton.setStyleSheet("QToolButton { border: none; 
padding: 0px; }")
         self.clearButton.hide()
         self.clearButton.clicked.connect(self.clear)
         self.textChanged.connect(self.updateCloseButton)


         self.searchButton = QtGui.QToolButton(self)
         self.searchButton.setIcon(QtGui.QIcon(searchPixmap))
         self.searchButton.setIconSize(searchPixmap.size())
         self.searchButton.setStyleSheet("QToolButton { border: none; 
padding: 0px; }")

         frameWidth = 
self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
         self.setStyleSheet("QLineEdit { padding-left: %spx; 
padding-right: %spx; } " % (self.searchButton.sizeHint().width() + 
frameWidth + 1, self.clearButton.sizeHint().width() + frameWidth + 1))
         msz = self.minimumSizeHint()
         self.setMinimumSize(max(msz.width(), 
self.searchButton.sizeHint().width() + 
self.clearButton.sizeHint().width() + frameWidth * 2 + 2),
                             max(msz.height(), 
self.clearButton.sizeHint().height() + frameWidth * 2 + 2))

#        self.searchMenu = QtGui.QMenu(self.searchButton)
#        self.searchButton.setMenu(self.searchMenu)
#        self.searchMenu.addAction("Google")
#        self.searchButton.setPopupMode(QtGui.QToolButton.InstantPopup)


     def resizeEvent(self, event):
         sz = self.clearButton.sizeHint()
         frameWidth = 
self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
         self.clearButton.move(self.rect().right() - frameWidth - 
sz.width(),
                               (self.rect().bottom() + 1 - sz.height()) / 2)
         self.searchButton.move(self.rect().left() + 1,
                               (self.rect().bottom() + 1 - sz.height()) / 2)

     def updateCloseButton(self, text):
         if text:
             self.clearButton.setVisible(True)
         else:
             self.clearButton.setVisible(False)


app = QtGui.QApplication([])
w = SearchLineEdit(QtGui.QPixmap(r"system-search.png"), 
QtGui.QPixmap(r"process-stop.png"))
w.show()
app.exec_()


On 06/07/2012 06:42 AM, Frank Rueter | OHUfx wrote:
> Hi all,
>
> quick question for the more experienced:
> Is there a core widget for text search? I'm after pretty something that
> looks pretty much like this one (at the top):
> http://farm5.static.flickr.com/4042/4574583703_f7be03c653.jpg
>
> What I like is it's compactness. A little icon on one side inside the
> box to indicate what it does, and a little "clear" icon on the other
> side to quickly clear out the search field to return everything.
>
> I'm happy to try and write my own but thought I'd check if I'm missing
> the obvious.
>
> Cheers,
> frank
> _______________________________________________
> PySide mailing list
> PySide at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/pyside


-- 
Sebastian Elsner    -    pipeline td   -   r i s e |  fx

t:  +49 30 20180300                 sebastian at risefx.com
                                           www.risefx.com

r i s e |  fx  GmbH
Schlesische Strasse 28 Aufgang B, 10997 Berlin
Geschäftsführer: Sven Pannicke, Robert Pinnow

Handelsregister Berlin HRB 106667 B




More information about the PySide mailing list