Yay!&nbsp; Thanks, Mark, that did it!&nbsp; Having read your (most of) book, I should&#39;ve thought of that, but it hasn&#39;t all sunk in yet.<br><br>Kerri<br><br><div><span class="gmail_quote">On 1/14/08, <b class="gmail_sendername">
Mark Summerfield</b> &lt;<a href="mailto:mark@qtrac.eu">mark@qtrac.eu</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On 2008-01-14, Kerri Reno wrote:
<br>&gt; Thanks, Mark, that&#39;s closer.&nbsp;&nbsp;But it still only shows part of the note,<br>&gt; &#39;emergency broadcast system&#39;.<br><br>Ah, what you need is the single shot timer trick. Add this line at the<br>end of the notesView initializer:
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QTimer.singleShot(0, self.resizeRowsToContents)<br><br>After the initializer has finished (and the form has therefore been<br>created and shown) this timer will time out and _then_<br>resizeRowsToContents will be called at which point it will show all the
<br>text.<br><br>&gt; On 1/12/08, Mark Summerfield &lt;<a href="mailto:mark@qtrac.eu">mark@qtrac.eu</a>&gt; wrote:<br>&gt; &gt; On 2008-01-11, Kerri Reno wrote:<br>&gt; &gt; &gt; Below is my code.&nbsp;&nbsp;The first column wraps, but the third column
<br>&gt; &gt; &gt; doesn&#39;t, and shows ....<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; What am I doing wrong?&nbsp;&nbsp;I would like both columns to wrap.<br>&gt; &gt;<br>&gt; &gt; (1) After you&#39;ve set word wrap you need to call:<br>
&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;self.setTextElideMode(Qt.ElideNone)<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;This stops PyQt making long texts short by inserting an ellipsis<br>&gt; &gt;<br>&gt; &gt; (2) Do not call resizeColumnsToContents()
<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; The call you have is pointless anyway because you resize before<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; you&#39;ve got any data, but if you call this after you have data the<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; columns will simply grow as wide as needed and you&#39;ll get a
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; horizontal scrollbar<br>&gt; &gt;<br>&gt; &gt; (3) Call resizeRowsToContents() whenever the model&#39;s data changes (or at<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; least after the initial data is loaded)<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; This is to ensure that each row is tall enough to show the wrapped
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; text.<br>&gt; &gt;<br>&gt; &gt; from PyQt4.QtGui import *<br>&gt; &gt; from PyQt4.QtCore import *<br>&gt; &gt; import sys<br>&gt; &gt;<br>&gt; &gt; class notesView(QTableView):<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; def __init__(self,parent, notes):
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QTableView.__init__(self,parent)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.setSizePolicy(QSizePolicy.Preferred,<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QSizePolicy.Fixed)<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v = self.verticalHeader()
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v.hide()<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.model = notesModel(notes)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.setWordWrap(True)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.setTextElideMode(Qt.ElideNone) # ADD<br>&gt; &gt; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
self.resizeRowsToContents()<br>&gt; &gt; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.resizeColumnsToContents()<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.setModel(self.model)<br>&gt; &gt;<br>&gt; &gt; class notesModel(QAbstractTableModel):<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; def __init__(self, notes):
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QAbstractTableModel.__init__(self)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.notes = notes<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; def flags(self,index):<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not index.isValid():<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
Qt.ItemIsEnabled<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Qt.ItemFlags(QAbstractTableModel.flags(self,index))<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; def rowCount(self, index=QModelIndex()):<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return len(self.notes)<br>&gt; &gt;
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; def columnCount(self,index=QModelIndex()):<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 3<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; def headerData(self,section,orientation,role=Qt.DisplayRole):<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if role == Qt.TextAlignmentRole
:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if orientation == Qt.Horizontal:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(int(Qt.AlignHCenter|Qt.AlignVCenter))<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(int(Qt.AlignRight|Qt.AlignVCenter))<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if role != Qt.DisplayRole:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant()<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if orientation == Qt.Horizontal:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if section == 0:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(&#39;Date&#39;)
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif section == 1:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(&#39;Author&#39;)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif section == 2:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(&#39;Note&#39;)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(int(section+1))
<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; def data(self,index,role=Qt.DisplayRole):<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not index.isValid() or not (0 &lt;= index.row() &lt; len(self.notes<br>&gt; &gt; )):<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant()
<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; note = self.notes[index.row()]<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column = index.column()<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if role == Qt.DisplayRole:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if column ==&nbsp;&nbsp;0:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(QString(note[&#39;stamp&#39;]))
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif column == 1:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(QString(&quot;%1,<br>&gt; &gt; %2&quot;).arg(note[&#39;last_name&#39;],note[&#39;first_name&#39;]))<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif column == 2:
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(QString(note[&#39;note&#39;]))<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif role == Qt.TextAlignmentRole:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant(int(Qt.AlignLeft|Qt.AlignVCenter))<br>&gt; &gt;
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QVariant()<br>&gt; &gt;<br>&gt; &gt; if __name__ == &#39;__main__&#39;:<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; app = QApplication(sys.argv)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; form = QDialog()<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; notes_list = [{&#39;id&#39;:1,
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;stamp&#39;: &#39;1/3/2008 4:31:04 PM&#39;,<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;last_name&#39;:&#39;Blow&#39;,<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;first_name&#39;:&#39;Joe&#39;,<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;note&#39;:&#39;This is a test of the emergency broadcast
<br>&gt; &gt; system.&nbsp;&nbsp;This<br>&gt; &gt; is only a test.&#39;}]<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; notes = notesView(form, notes_list)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; notes.resizeRowsToContents() # ADD<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; notes.setMinimumWidth(400)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; 
notes.setMinimumHeight(200)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; form.show()<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; app.exec_()<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; --<br>&gt; &gt; Mark Summerfield, Qtrac Ltd., www.qtrac.eu<br><br><br><br>--<br>Mark Summerfield, Qtrac Ltd., 
www.qtrac.eu<br><br></blockquote></div><br><br clear="all"><br>-- <br>Yuma Educational Computer Consortium<br>Compass Development Team<br>Kerri Reno<br><a href="mailto:kreno@yumaed.org">kreno@yumaed.org</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(928) 502-4240
<br>.·:*¨¨*:·.&nbsp;&nbsp; .·:*¨¨*:·.&nbsp;&nbsp; .·:*¨¨*:·.