[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] [PYQT5]Highlight search results in qtablewidget(select and highlight that text or charact
From:       Maziar Parsijani <maziar.parsijani () gmail ! com>
Date:       2018-08-21 5:50:21
Message-ID: CAPD04aN_UBhu58EuA4P-bOHxOMndfFTHDyFodEjh1+MTSXJ0GA () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Well of course I am not OK with the code that I sent.And as I said the font
and alignment are important to me.

On Mon, Aug 20, 2018 at 10:59 PM, Maurizio Berti <maurizio.berti@gmail.com>
wrote:

> In my opinion, if I may, it seems a bit too complex and elaborate than it
> could be, and seems to be even more prone to error; for instance, it's not
> clear why you init a new QStyleOptionViewItem, while you can just
> initStyleOption the one from the paint argument, and the use of
> PaintContext is missing important state cases (focus/active, enabled,
> hover, etc). But, if it works for you, that's fine :-)
> 
> About the size, since you are not using character distinction
> (bold/italic), you could use QFontMetrics (that will not take kerning into
> account, obviously) with its width or boundingRect methods.
> If you are interested in width only, I suppose QTextDocument's textWidth
> should be fine also, but I actually never used for this kind of situations.
> 
> If alignment is an issue, you should be able to fix those data with
> QStyleOption's displayAlignment, along with QWidget's layoutDirection and
> QLocale settings, but I suppose you already know that.
> 
> Maurizio
> 
> Il giorno lun 20 ago 2018 alle ore 18:58 Maziar Parsijani <
> maziar.parsijani@gmail.com> ha scritto:
> 
> > Here I think Maurizio code will functioning like this :
> > 
> > from PyQt5 import QtCore, QtGui, QtWidgets
> > import random
> > import html
> > 
> > words = ["Hello", "world", "Stack", "Overflow", "Hello world", """<font \
> > color="red">Hello world</font>"""] 
> > 
> > class HTMLDelegate(QtWidgets.QStyledItemDelegate):
> > def __init__(self, parent=None):
> > super(HTMLDelegate, self).__init__(parent)
> > self.doc = QtGui.QTextDocument(self)
> > 
> > def paint(self, painter, option, index):
> > substring = index.data(QtCore.Qt.UserRole)
> > painter.save()
> > options = QtWidgets.QStyleOptionViewItem(option)
> > self.initStyleOption(options, index)
> > res = ""
> > color = QtGui.QColor("orange")
> > if substring:
> > substrings = options.text.split(substring)
> > res = """<font color="{}">{}</font>""".format(color.name(QtGui.QColor.HexRgb), \
> > substring).join(list(map(html.escape, substrings))) else:
> > res = html.escape(options.text)
> > self.doc.setHtml(res)
> > 
> > options.text = ""
> > style = QtWidgets.QApplication.style() if options.widget is None \
> > else options.widget.style()
> > style.drawControl(QtWidgets.QStyle.CE_ItemViewItem, options, painter)
> > 
> > ctx = QtGui.QAbstractTextDocumentLayout.PaintContext()
> > if option.state & QtWidgets.QStyle.State_Selected:
> > ctx.palette.setColor(QtGui.QPalette.Text, option.palette.color(
> > QtGui.QPalette.Active, QtGui.QPalette.HighlightedText))
> > else:
> > ctx.palette.setColor(QtGui.QPalette.Text, option.palette.color(
> > QtGui.QPalette.Active, QtGui.QPalette.Text))
> > 
> > textRect = style.subElementRect(
> > QtWidgets.QStyle.SE_ItemViewItemText, options)
> > 
> > if index.column() != 0:
> > textRect.adjust(5, 0, 0, 0)
> > 
> > thefuckyourshitup_constant = 4
> > margin = (option.rect.height() - options.fontMetrics.height()) // 2
> > margin = margin - thefuckyourshitup_constant
> > textRect.setTop(textRect.top() + margin)
> > 
> > painter.translate(textRect.topLeft())
> > painter.setClipRect(textRect.translated(-textRect.topLeft()))
> > self.doc.documentLayout().draw(painter, ctx)
> > 
> > painter.restore()
> > 
> > 
> > def sizeHint(self, option, index):
> > return QSize(self.doc.idealWidth(), self.doc.size().height())
> > 
> > class Widget(QtWidgets.QWidget):
> > def __init__(self, parent=None):
> > super(Widget, self).__init__(parent)
> > hlay = QtWidgets.QHBoxLayout()
> > lay = QtWidgets.QVBoxLayout(self)
> > 
> > self.le = QtWidgets.QLineEdit()
> > self.button = QtWidgets.QPushButton("filter")
> > self.table = QtWidgets.QTableWidget(5, 5)
> > hlay.addWidget(self.le)
> > hlay.addWidget(self.button)
> > lay.addLayout(hlay)
> > lay.addWidget(self.table)
> > self.button.clicked.connect(self.find_items)
> > self.table.setItemDelegate(HTMLDelegate(self.table))
> > 
> > for i in range(self.table.rowCount()):
> > for j in range(self.table.columnCount()):
> > it = QtWidgets.QTableWidgetItem(random.choice(words))
> > self.table.setItem(i, j, it)
> > 
> > def find_items(self):
> > text = self.le.text()
> > # clear
> > allitems = self.table.findItems("", QtCore.Qt.MatchContains)
> > selected_items = self.table.findItems(self.le.text(), QtCore.Qt.MatchContains)
> > for item in allitems:
> > item.setData(QtCore.Qt.UserRole, text if item in selected_items else None)
> > 
> > 
> > if __name__ == '__main__':
> > import sys
> > app = QtWidgets.QApplication(sys.argv)
> > w = Widget()
> > w.show()
> > sys.exit(app.exec_())
> > 
> > But the main problem of this method as you said is changing in font size and \
> > aligning because my data's are Arabic and English. 
> > 
> > On Mon, Aug 20, 2018 at 7:15 PM, Maurizio Berti <maurizio.berti@gmail.com
> > > wrote:
> > 
> > > I'm not an expert on regular expressions, maybe there's a better and
> > > faster approach than the one I used in the example.
> > > I initially tried using re.sub, but works correctly only if you want to
> > > match case, as the substitution string is fixed.
> > > Anyway, it seems fast enough to me, as the viewport update() takes care
> > > of repainting only visible elements.
> > > 
> > > Another (derivate) approach could be subclassing the model too (the
> > > data() method), adding a custom user role for the html filtered text that
> > > can be read by the delegate, maybe with some sort of caching in the model
> > > to speed up reading. It may be slightly faster and more "elegant" (the
> > > model takes care of the string match, not the delegate), and could be
> > > useful for further implementation.
> > > 
> > > I forgot to say: my example obviously doesn't consider spacings, grid
> > > lines pen width and icon decoration.
> > > 
> > > Maurizio
> > > 
> > > Il giorno lun 20 ago 2018 alle ore 16:01 Maziar Parsijani <
> > > maziar.parsijani@gmail.com> ha scritto:
> > > 
> > > > Really thanks to Maurizio
> > > > I will try this.I agree with you and was thinking if someone had a
> > > > solution with re library and regix could be better for me .
> > > > 
> > > > 
> > > > On Mon, Aug 20, 2018 at 6:09 PM, Maurizio Berti <
> > > > maurizio.berti@gmail.com> wrote:
> > > > 
> > > > > I know you already found a solution, but I decided to give it a try
> > > > > anyway, just out of curiosity.
> > > > > I didn't like the idea of using another QWidget, which might involve
> > > > > QStyle issues, then I found out that it's possible to use QTextDocument.
> > > > > This is a simple implementation that just matches the text in all
> > > > > items (no actual search in the model).
> > > > > 
> > > > > 
> > > > > class MatchDelegate(QtWidgets.QStyledItemDelegate):
> > > > > regex = re.compile('')
> > > > > fakeIndex = QtCore.QModelIndex()
> > > > > 
> > > > > def paint(self, qp, option, index):
> > > > > self.initStyleOption(option, index)
> > > > > td = QtGui.QTextDocument()
> > > > > if self.regex.pattern:
> > > > > splitted = self.regex.split(option.text)
> > > > > matches = iter(self.regex.findall(option.text))
> > > > > text = ''
> > > > > for words in splitted[:-1]:
> > > > > text += words + '<b>{}</b>'.format(matches.next())
> > > > > text += splitted[-1]
> > > > > else:
> > > > > text = option.text
> > > > > td.setHtml(text)
> > > > > option.text = ''
> > > > > # Using an invalid index avoids painting of the text
> > > > > QtWidgets.QStyledItemDelegate.paint(self, qp, option,
> > > > > self.fakeIndex)
> > > > > qp.save()
> > > > > qp.translate(option.rect.topLeft())
> > > > > td.drawContents(qp, QtCore.QRectF(0, 0, option.rect.width(),
> > > > > option.rect.height()))
> > > > > qp.restore()
> > > > > 
> > > > > 
> > > > > class Widget(QtWidgets.QWidget):
> > > > > def __init__(self):
> > > > > [...]
> > > > > self.delegate = MatchDelegate()
> > > > > self.table.setItemDelegate(self.delegate)
> > > > > self.search = QtWidgets.QLineEdit()
> > > > > self.search.textChanged.connect(self.findText)
> > > > > [...]
> > > > > 
> > > > > def findText(self, text):
> > > > > self.delegate.regex = re.compile(text, re.I)
> > > > > self.table.viewport().update()
> > > > > 
> > > > > 
> > > > > Of course it doesn't take the text size change into account whenever
> > > > > bold characters are in place, so the sizeHint is not perfect. Also, it
> > > > > might be possible to implement QFontMetrics' elidedText, again with some
> > > > > small issues about font size changes.
> > > > > 
> > > > > Maurizio
> > > > > 
> > > > > 
> > > > > Il giorno lun 20 ago 2018 alle ore 11:31 Maziar Parsijani <
> > > > > maziar.parsijani@gmail.com> ha scritto:
> > > > > 
> > > > > > Hi Denis Rouzaud
> > > > > > 
> > > > > > This question was for 19days ago.But you are correct the best method
> > > > > > is html delegate and I did it but I couldn't fix that with my table and \
> > > > > > the table was changed but it worked nice.
> > > > > > 
> > > > > > On Mon, Aug 20, 2018 at 12:28 PM, Denis Rouzaud <
> > > > > > denis.rouzaud@gmail.com> wrote:
> > > > > > 
> > > > > > > This is not easily done.
> > > > > > > You'd have to create a custom delegate using a QLabbel and use html
> > > > > > > in there.
> > > > > > > 
> > > > > > > I have been creating a search tool for tables and ending up
> > > > > > > highlighting the whole cell.
> > > > > > > The effort and the risk of bad results is just not worth the effort
> > > > > > > IMHO.
> > > > > > > 
> > > > > > > Denis
> > > > > > > 
> > > > > > > Le mar. 31 juil. 2018 Ã  23:05, Maziar Parsijani <
> > > > > > > maziar.parsijani@gmail.com> a écrit :
> > > > > > > 
> > > > > > > > I use method1 to find some text in qtablewidget rows.
> > > > > > > > 
> > > > > > > > method1 :
> > > > > > > > 
> > > > > > > > def FindItem(self):
> > > > > > > > items = self.SuraBRS.findItems(
> > > > > > > > self.SearchTbox.text(), QtCore.Qt.MatchContains)
> > > > > > > > if items:
> > > > > > > > results = '\n'.join(
> > > > > > > > 'row %d column %d' % (item.row() + 1, item.column() + 1)
> > > > > > > > for item in items)
> > > > > > > > else:
> > > > > > > > results = 'Found Nothing'
> > > > > > > > print(results)
> > > > > > > > 
> > > > > > > > Now I want to know how to highlight results or change their color.*I
> > > > > > > > want to select and highlight that text or character not all of the \
> > > > > > > > row or column*.
> > > > > > > > _______________________________________________
> > > > > > > > PyQt mailing list    PyQt@riverbankcomputing.com
> > > > > > > > https://www.riverbankcomputing.com/mailman/listinfo/pyqt
> > > > > > > 
> > > > > > > --
> > > > > > > 
> > > > > > > Denis Rouzaud
> > > > > > > denis@opengis.ch  <denis@opengis.ch>
> > > > > > > +41 76 370 21 22
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > _______________________________________________
> > > > > > PyQt mailing list    PyQt@riverbankcomputing.com
> > > > > > https://www.riverbankcomputing.com/mailman/listinfo/pyqt
> > > > > 
> > > > > 
> > > > > 
> > > > > --
> > > > > È difficile avere una convinzione precisa quando si parla delle
> > > > > ragioni del cuore. - "Sostiene Pereira", Antonio Tabucchi
> > > > > http://www.jidesk.net
> > > > > 
> > > > 
> > > > 
> > > 
> > > --
> > > È difficile avere una convinzione precisa quando si parla delle ragioni
> > > del cuore. - "Sostiene Pereira", Antonio Tabucchi
> > > http://www.jidesk.net
> > > 
> > 
> > 
> 
> --
> È difficile avere una convinzione precisa quando si parla delle ragioni
> del cuore. - "Sostiene Pereira", Antonio Tabucchi
> http://www.jidesk.net
> 


[Attachment #5 (text/html)]

<div dir="ltr">Well of course I am not OK with the code that I sent.And as I said the \
font and alignment are important to me.<br></div><div class="gmail_extra"><br><div \
class="gmail_quote">On Mon, Aug 20, 2018 at 10:59 PM, Maurizio Berti <span \
dir="ltr">&lt;<a href="mailto:maurizio.berti@gmail.com" \
target="_blank">maurizio.berti@gmail.com</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex"><div dir="ltr">In my opinion, if I may, it seems a bit too \
complex and elaborate than it could be, and seems to be even more prone to error; for \
instance, it&#39;s not clear why you init a new QStyleOptionViewItem, while you can \
just initStyleOption the one from the paint argument, and the use of PaintContext is \
missing important state cases (focus/active, enabled, hover, etc). But, if it works \
for you, that&#39;s fine :-)<br><br><div>About the size, since you are not using \
character distinction (bold/italic), you could use QFontMetrics (that will not take \
kerning into account, obviously) with its width or boundingRect methods.<br>If you \
are interested in width only, I suppose QTextDocument&#39;s textWidth should be fine \
also, but I actually never used for this kind of situations.<div><br></div><div>If \
alignment is an issue, you should be able to fix those data with QStyleOption&#39;s \
displayAlignment, along with QWidget&#39;s layoutDirection and QLocale settings, but \
I suppose you already know that.</div><span class="HOEnZb"><font \
color="#888888"><div><br></div><div>Maurizio</div></font></span></div></div><div \
class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">Il giorno \
lun 20 ago 2018 alle ore 18:58 Maziar Parsijani &lt;<a \
href="mailto:maziar.parsijani@gmail.com" \
target="_blank">maziar.parsijani@gmail.com</a>&gt; ha scritto:<br></div><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex"><div dir="ltr"><div>Here I think Maurizio code will \
functioning like this :<br><pre \
style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:&quot;DejaVu \
Sans Mono&quot;;font-size:9.1pt"><span \
style="color:rgb(0,0,128);font-weight:bold">from </span>PyQt5 <span \
style="color:rgb(0,0,128);font-weight:bold">import </span>QtCore, QtGui, \
QtWidgets<br><span style="color:rgb(0,0,128);font-weight:bold">import \
</span>random<br><span style="color:rgb(0,0,128);font-weight:bold">import \
</span>html<br><br>words = [<span \
style="color:rgb(0,128,128);font-weight:bold">&quot;Hello&quot;</span>, <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;world&quot;</span>, <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;Stack&quot;</span>, <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;Overflow&quot;</span>, <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;Hello world&quot;</span>, <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;&quot;&quot;&lt;font \
color=&quot;red&quot;&gt;Hello \
world&lt;/font&gt;&quot;&quot;&quot;</span>]<br><br><br><span \
style="color:rgb(0,0,128);font-weight:bold">class \
</span>HTMLDelegate(QtWidgets.<wbr>QStyledItemDelegate):<br>    <span \
style="color:rgb(0,0,128);font-weight:bold">def </span><span \
style="color:rgb(178,0,178)">__init__</span>(<span \
style="color:rgb(148,85,141)">self</span>, parent=<span \
style="color:rgb(0,0,128);font-weight:bold">None</span>):<br>        <span \
style="color:rgb(0,0,128)">super</span>(HTMLDelegate, <span \
style="color:rgb(148,85,141)">self</span>).<span \
style="color:rgb(178,0,178)">__init__</span>(parent)<br>        <span \
style="color:rgb(148,85,141)">self</span>.doc = QtGui.QTextDocument(<span \
style="color:rgb(148,85,141)">self</span>)<br><br>    <span \
style="color:rgb(0,0,128);font-weight:bold">def </span>paint(<span \
style="color:rgb(148,85,141)">self</span>, painter, option, index):<br>        \
substring = index.data(QtCore.Qt.UserRole)<br>        painter.save()<br>        \
options = QtWidgets.<wbr>QStyleOptionViewItem(option)<br>        <span \
style="color:rgb(148,85,141)">self</span>.initStyleOption(options, index)<br>        \
<span style="color:rgb(128,128,128)">res </span>= <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;&quot;<br></span><span \
style="color:rgb(0,128,128);font-weight:bold">        </span>color = \
QtGui.QColor(<span style="color:rgb(0,128,128);font-weight:bold">&quot;orange&quot;</span>)<br> \
<span style="color:rgb(0,0,128);font-weight:bold">if </span>substring:<br>            \
substrings = options.text.split(substring)<br>            res = <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;&quot;&quot;&lt;font \
color=&quot;{}&quot;&gt;{}&lt;/font&gt;&quot;&quot;&quot;</span>.<wbr>format(<a \
href="http://color.name" target="_blank">color.name</a>(QtGui.<wbr>QColor.HexRgb), \
substring).join(<span style="color:rgb(0,0,128)">list</span>(<span \
style="color:rgb(0,0,128)">map</span>(html.<wbr>escape, substrings)))<br>        \
<span style="color:rgb(0,0,128);font-weight:bold">else</span>:<br>            res = \
html.escape(options.text)<br>        <span \
style="color:rgb(148,85,141)">self</span>.doc.setHtml(res)<br><br>        \
options.text = <span \
style="color:rgb(0,128,128);font-weight:bold">&quot;&quot;<br></span><span \
style="color:rgb(0,128,128);font-weight:bold">        </span>style = \
QtWidgets.QApplication.style() <span style="color:rgb(0,0,128);font-weight:bold">if \
</span>options.widget <span style="color:rgb(0,0,128);font-weight:bold">is None \
</span>\<br>            <span style="color:rgb(0,0,128);font-weight:bold">else \
</span>options.widget.style()<br>        \
style.drawControl(QtWidgets.<wbr>QStyle.CE_ItemViewItem, options, painter)<br><br>    \
ctx = QtGui.<wbr>QAbstractTextDocumentLayout.<wbr>PaintContext()<br>        <span \
style="color:rgb(0,0,128);font-weight:bold">if </span>option.state &amp; \
QtWidgets.QStyle.State_<wbr>Selected:<br>            \
ctx.palette.setColor(QtGui.<wbr>QPalette.Text, option.palette.color(<br>              \
QtGui.QPalette.Active, QtGui.QPalette.<wbr>HighlightedText))<br>        <span \
style="color:rgb(0,0,128);font-weight:bold">else</span>:<br>            \
ctx.palette.setColor(QtGui.<wbr>QPalette.Text, option.palette.color(<br>              \
QtGui.QPalette.Active, QtGui.QPalette.Text))<br><br>        textRect = \
style.subElementRect(<br>            QtWidgets.QStyle.SE_<wbr>ItemViewItemText, \
options)<br><br>        <span style="color:rgb(0,0,128);font-weight:bold">if \
</span>index.column() != <span style="color:rgb(0,0,255)">0</span>:<br>            \
textRect.adjust(<span style="color:rgb(0,0,255)">5</span>, <span \
style="color:rgb(0,0,255)">0</span>, <span style="color:rgb(0,0,255)">0</span>, <span \
style="color:rgb(0,0,255)">0</span>)<br><br>        thefuckyourshitup_constant = \
<span style="color:rgb(0,0,255)">4<br></span><span style="color:rgb(0,0,255)">        \
</span>margin = (option.rect.height() - options.fontMetrics.height()) // <span \
style="color:rgb(0,0,255)">2<br></span><span style="color:rgb(0,0,255)">        \
</span>margin = margin - thefuckyourshitup_constant<br>        \
textRect.setTop(textRect.top() + margin)<br><br>        \
painter.translate(textRect.<wbr>topLeft())<br>        \
painter.setClipRect(textRect.<wbr>translated(-textRect.topLeft()<wbr>))<br>        \
<span style="color:rgb(148,85,141)">self</span>.doc.documentLayout().<wbr>draw(painter, \
ctx)<br><br>        painter.restore()<br><br><br>    <span \
style="color:rgb(0,0,128);font-weight:bold">def </span>sizeHint(<span \
style="color:rgb(148,85,141)">self</span>, option, index):<br>        <span \
style="color:rgb(0,0,128);font-weight:bold">return </span>QSize(<span \
style="color:rgb(148,85,141)">self</span>.doc.idealWidth(), <span \
style="color:rgb(148,85,141)">self</span>.doc.size().height())<br><br><span \
style="color:rgb(0,0,128);font-weight:bold">class \
</span>Widget(QtWidgets.QWidget):<br>    <span \
style="color:rgb(0,0,128);font-weight:bold">def </span><span \
style="color:rgb(178,0,178)">__init__</span>(<span \
style="color:rgb(148,85,141)">self</span>, parent=<span \
style="color:rgb(0,0,128);font-weight:bold">None</span>):<br>        <span \
style="color:rgb(0,0,128)">super</span>(Widget, <span \
style="color:rgb(148,85,141)">self</span>).<span \
style="color:rgb(178,0,178)">__init__</span>(parent)<br>        hlay = \
QtWidgets.QHBoxLayout()<br>        lay = QtWidgets.QVBoxLayout(<span \
style="color:rgb(148,85,141)">self</span>)<br><br>        <span \
style="color:rgb(148,85,141)">self</span>.le = QtWidgets.QLineEdit()<br>        <span \
style="color:rgb(148,85,141)">self</span>.button = QtWidgets.QPushButton(<span \
style="color:rgb(0,128,128);font-weight:bold">&quot;filter&quot;</span><wbr>)<br>     \
<span style="color:rgb(148,85,141)">self</span>.table = QtWidgets.QTableWidget(<span \
style="color:rgb(0,0,255)">5</span>, <span style="color:rgb(0,0,255)">5</span>)<br>   \
hlay.addWidget(<span style="color:rgb(148,85,141)">self</span>.le)<br>        \
hlay.addWidget(<span style="color:rgb(148,85,141)">self</span>.button)<br>        \
lay.addLayout(hlay)<br>        lay.addWidget(<span \
style="color:rgb(148,85,141)">self</span>.table)<br>        <span \
style="color:rgb(148,85,141)">self</span>.button.clicked.connect(<span \
style="color:rgb(148,85,141)">se<wbr>lf</span>.find_items)<br>        <span \
style="color:rgb(148,85,141)">self</span>.table.setItemDelegate(<wbr>HTMLDelegate(<span \
style="color:rgb(148,85,141)">self</span>.table))<br><br>        <span \
style="color:rgb(0,0,128);font-weight:bold">for </span>i <span \
style="color:rgb(0,0,128);font-weight:bold">in </span><span \
style="color:rgb(0,0,128)">range</span>(<span \
style="color:rgb(148,85,141)">self</span>.table.rowCount()):<br>            <span \
style="color:rgb(0,0,128);font-weight:bold">for </span>j <span \
style="color:rgb(0,0,128);font-weight:bold">in </span><span \
style="color:rgb(0,0,128)">range</span>(<span \
style="color:rgb(148,85,141)">self</span>.table.columnCount()<wbr>):<br>              \
it = QtWidgets.QTableWidgetItem(<wbr>random.choice(words))<br>                <span \
style="color:rgb(148,85,141)">self</span>.table.setItem(i, j, it)<br><br>    <span \
style="color:rgb(0,0,128);font-weight:bold">def </span>find_items(<span \
style="color:rgb(148,85,141)">self</span>):<br>        text = <span \
style="color:rgb(148,85,141)">self</span>.le.text()<br>        <span \
style="color:rgb(128,128,128);font-style:italic"># clear<br></span><span \
style="color:rgb(128,128,128);font-style:italic">        </span>allitems = <span \
style="color:rgb(148,85,141)">self</span>.table.findItems(<span \
style="color:rgb(0,128,128);font-weight:bold">&quot;&quot;</span>, \
QtCore.Qt.MatchContains)<br>        selected_items = <span \
style="color:rgb(148,85,141)">self</span>.table.findItems(<span \
style="color:rgb(148,85,141)">self</span>.le.<wbr>text(), \
QtCore.Qt.MatchContains)<br>        <span \
style="color:rgb(0,0,128);font-weight:bold">for </span>item <span \
style="color:rgb(0,0,128);font-weight:bold">in </span>allitems:<br>            \
item.setData(QtCore.Qt.<wbr>UserRole, text <span \
style="color:rgb(0,0,128);font-weight:bold">if </span>item <span \
style="color:rgb(0,0,128);font-weight:bold">in </span>selected_items <span \
style="color:rgb(0,0,128);font-weight:bold">else None</span>)<br><br><br><span \
style="color:rgb(0,0,128);font-weight:bold">if </span>__name__ == <span \
style="color:rgb(0,128,128);font-weight:bold">&#39;__main__&#39;</span>:<br>    <span \
style="color:rgb(0,0,128);font-weight:bold">import </span>sys<br>    app = \
QtWidgets.QApplication(sys.<wbr>argv)<br>    w = Widget()<br>    w.show()<br>    \
sys.exit(app.exec_())<br><br></pre><pre \
style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:&quot;DejaVu \
Sans Mono&quot;;font-size:9.1pt">But the main problem of this method as you said is \
changing in font size and aligning because my data&#39;s are Arabic and \
English.<br></pre></div></div><div class="gmail_extra"><br><div \
class="gmail_quote">On Mon, Aug 20, 2018 at 7:15 PM, Maurizio Berti <span \
dir="ltr">&lt;<a href="mailto:maurizio.berti@gmail.com" \
target="_blank">maurizio.berti@gmail.com</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex"><div dir="ltr">I&#39;m not an expert on regular expressions, \
maybe there&#39;s a better and faster approach than the one I used in the \
example.<div>I initially tried using re.sub, but works correctly only if you want to \
match case, as the substitution string is fixed.<br>Anyway, it seems fast enough to \
me, as the viewport update() takes care of repainting only visible \
elements.<br></div><div><br></div><div>Another (derivate) approach could be \
subclassing the model too (the data() method), adding a custom user role for the html \
filtered text that can be read by the delegate, maybe with some sort of caching in \
the model to speed up reading.  It may be slightly faster and more \
&quot;elegant&quot; (the model takes care of the string match, not the delegate), and \
could be useful for further implementation.</div><div><br></div><div>I forgot to say: \
my example obviously doesn&#39;t consider spacings, grid lines pen width and icon \
decoration.</div><span class="m_1550169153494673832m_3168939307277646746HOEnZb"><font \
color="#888888"><div><br>Maurizio</div></font></span></div><div \
class="m_1550169153494673832m_3168939307277646746HOEnZb"><div \
class="m_1550169153494673832m_3168939307277646746h5"><br><div \
class="gmail_quote"><div dir="ltr">Il giorno lun 20 ago 2018 alle ore 16:01 Maziar \
Parsijani &lt;<a href="mailto:maziar.parsijani@gmail.com" \
target="_blank">maziar.parsijani@gmail.com</a>&gt; ha scritto:<br></div><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex"><div dir="ltr"><div><div>Really thanks to Maurizio<br></div>I \
will try this.I agree with you and was thinking if someone had a solution with re \
library and regix could be better for me .<br></div>  <br></div><div \
class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 20, 2018 at 6:09 PM, \
Maurizio Berti <span dir="ltr">&lt;<a href="mailto:maurizio.berti@gmail.com" \
target="_blank">maurizio.berti@gmail.com</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex"><div dir="ltr">I know you already found a solution, but I \
decided to give it a try anyway, just out of curiosity.<br>I didn&#39;t like the idea \
of using another QWidget, which might involve QStyle issues, then I found out that \

<p>I use method1 to find some text in qtablewidget rows.</p><p>
method1 :</p>

<pre class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_639042870 \
1510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-lang-py \
m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6390428701510419058m_ \
7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-prettyprint \
m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6390428701510419058m_ \
7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-prettyprinted"><code><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-kwd">def</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-typ">FindItem</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">(</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">self</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">):</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  items </span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">=</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
self</span><span class="m_1550169153494673832m_3168939307277646746m_427165892259343451 \
9m_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-typ">SuraBRS</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">findItems</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">(</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  self</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434 \
519m_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-typ">SearchTbox</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">text</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">(),</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-typ">QtCore</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-typ">Qt</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-typ">MatchContains</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">)</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  </span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m \
_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-kwd">if</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
items</span><span class="m_1550169153494673832m_3168939307277646746m_42716589225934345 \
19m_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">:</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  results </span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">=</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-str">&#39;\n&#39;</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">join</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">(</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  </span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m \
_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-str">&#39;row \
%d column %d&#39;</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">%</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">(</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">item</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">row</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">()</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">+</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-lit">1</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">,</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
item</span><span class="m_1550169153494673832m_3168939307277646746m_427165892259343451 \
9m_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">.</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">column</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">()</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">+</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-lit">1</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">)</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  </span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m \
_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-kwd">for</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
item </span><span class="m_1550169153494673832m_3168939307277646746m_42716589225934345 \
19m_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-kwd">in</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
items</span><span class="m_1550169153494673832m_3168939307277646746m_42716589225934345 \
19m_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">)</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  </span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m \
_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-kwd">else</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">:</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  results </span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">=</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln"> \
</span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6 \
390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-str">&#39;Found \
Nothing&#39;</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">
  </span><span class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m \
_6390428701510419058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-kwd">print</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">(</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pln">results</span><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064m_1845155414697011962gmail-pun">)</span></code></pre>


<p>Now I want to know how to highlight results or change their color.<strong>I want \
to select and highlight that text or character not all of the row or \
column</strong>.</p>  </div></div></div></div>
______________________________<wbr>_________________<br>
PyQt mailing list      <a href="mailto:PyQt@riverbankcomputing.com" \
target="_blank">PyQt@riverbankcomputing.com</a><br> <a \
href="https://www.riverbankcomputing.com/mailman/listinfo/pyqt" rel="noreferrer" \
target="_blank">https://www.<wbr>riverbankcomputing.com/<wbr>mailman/listinfo/pyqt</a></blockquote></div><span \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6390428701510419058m_7375396995481516372m_5740204084834526960HOEnZb"><font \
color="#888888">-- <br><div dir="ltr" \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064gmail_signature" \
data-smartmail="gmail_signature"><div dir="ltr">





<p class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015 \
10419058m_7375396995481516372m_5740204084834526960m_5955850977701824064inbox-inbox-inbox-inbox-p1"><span \
style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:10pt">Denis \
Rouzaud</span><br style="color:rgb(0,0,0);font-family:Times;font-size:medium"><a \
href="mailto:denis@opengis.ch" style="font-family:Times;font-size:medium" \
target="_blank"><span \
style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:8pt">denis@opengis.ch</span> \
</a><br style="color:rgb(0,0,0);font-family:Times;font-size:medium"><span \
style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:8pt"><a>+41 76 370 \
21 22</a></span></p><p \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_63904287015104 \
19058m_7375396995481516372m_5740204084834526960m_5955850977701824064inbox-inbox-inbox-inbox-p1"><span \
style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:8pt"><a><br></a></span></p></div></div>
 </font></span></blockquote></div><br></div>
______________________________<wbr>_________________<br>
PyQt mailing list      <a href="mailto:PyQt@riverbankcomputing.com" \
target="_blank">PyQt@riverbankcomputing.com</a><br> <a \
href="https://www.riverbankcomputing.com/mailman/listinfo/pyqt" rel="noreferrer" \
target="_blank">https://www.<wbr>riverbankcomputing.com/<wbr>mailman/listinfo/pyqt</a></blockquote></div><br \
clear="all"><div><br></div>-- <br></div></div><div dir="ltr" \
class="m_1550169153494673832m_3168939307277646746m_4271658922593434519m_6390428701510419058m_7375396995481516372gmail_signature" \
data-smartmail="gmail_signature">È difficile avere una convinzione precisa quando si \
parla delle ragioni del cuore. - &quot;Sostiene Pereira&quot;, Antonio Tabucchi<br><a \
href="http://www.jidesk.net" target="_blank">http://www.jidesk.net</a></div> \
</blockquote></div><br></div> </blockquote></div><br clear="all"><div><br></div>-- \
<br><div dir="ltr" class="m_1550169153494673832m_3168939307277646746m_4271658922593434519gmail_signature" \
data-smartmail="gmail_signature">È difficile avere una convinzione precisa quando si \
parla delle ragioni del cuore. - &quot;Sostiene Pereira&quot;, Antonio Tabucchi<br><a \
href="http://www.jidesk.net" target="_blank">http://www.jidesk.net</a></div> \
</div></div></blockquote></div><br></div> </blockquote></div><br \
clear="all"><div><br></div>-- <br><div dir="ltr" \
class="m_1550169153494673832gmail_signature" data-smartmail="gmail_signature">È \
difficile avere una convinzione precisa quando si parla delle ragioni del cuore. - \
&quot;Sostiene Pereira&quot;, Antonio Tabucchi<br><a href="http://www.jidesk.net" \
target="_blank">http://www.jidesk.net</a></div> \
</div></div></blockquote></div><br></div>


[Attachment #6 (text/plain)]

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic