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

List:       pykde
Subject:    Re: [PyQt] QCompleter with any data Model will cause Segmentation fault in pyQt4?
From:       Robert Kent <rob () gulon ! co ! uk>
Date:       2012-12-26 10:42:00
Message-ID: 0A5DD4A4-5236-4ED8-BE8F-1F88D97F1102 () gulon ! co ! uk
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


What OS, python version and PyQt version are you using? I'm running OSX10.8, python \
2.7 and PyQt 4.9.6 and I can't reproduce your error.

On 25 Dec 2012, at 12:46, "^_^Sisyphus^_^" <freesisyphuswang@gmail.com> wrote:

> Dear all,
> 
> I create QCompleters for QLineEdit, which work fine if there is no dynamically \
> defined function/method in the subclasses (try to run the script with \
> ./bugCompleterFilesysModel.py n n in [0, 1, 2, 9], then try to bring up the \
> completer by deleting some char in the LineEdit box). The QCompleter can work with \
> QStringList, QStringListModel, and QFileSystemModel. 
> If I add some dynamically defined function/method in the subclass with QCompleter \
> of simple QStringList, the instances work fine too (try to run the script with \
> ./bugCompleterFilesysModel.py n n in [10, 20, 30], then try to bring up the \
> completer by deleting some char in the LineEdit box). 
> However, if I defined any function/method dynamically, the QCompleter with any kind \
> of data model, will raise an error during closing the GUI window: 
> 
> QObject::startTimer: QTimer can only be used with threads started with QThread
> Segmentation fault
> 
> To repeat the error, try to run the script with ./bugCompleterFilesysModel.py mn m \
> in [1,2,3], n in [1, 2, 9], then try to bring up the completer by deleting some \
> char in the LineEdit box, then close the window. 
> Can anyone tell my why is that and how to fix it? I have been scratching my head \
> for hours.  
> Thanks ahead!
> 
> Full script of bugCompleterFilesysModel.py:
> 
> 
> #!/usr/bin/env python
> # -*- coding: UTF-8 -*-
> class MyBaseWidget(QtGui.QWidget):
> dirChanged=QtCore.pyqtSignal(QtCore.QString)
> def __init__(self,parent=None,addfunc0=False,*args,**kwargs):
> super(MyBaseWidget, self).__init__(parent)
> self.addfunc0=addfunc0
> self.func0=None
> self.dummyWgt=1
> self.initUI()
> 
> def initUI(self,*args,**kwargs):
> addfunc0=self.addfunc0
> if addfunc0 == 1:
> self.func0=self.funcFactory0('1')
> _func0str="self.funcFactory0('1')"
> if addfunc0 == 2:
> self.func0=self.funcFactory1('1')
> _func0str="self.funcFactory1('1')"
> if addfunc0 == 3:
> self.func0=self.funcFactory1b()
> _func0str="self.funcFactory1b()"
> 
> if addfunc0 > 0:
> #print self.printWgt
> print 'use %s as func0'%(_func0str)
> print 'self.func0 = %s'%(self.func0)
> self.func0()
> 
> self.show()
> 
> def printWgt(self,wgt0):
> print 'Input obj is:', wgt0.__class__.__name__
> 
> def funcFactory0(self,wgt0):
> def _func():
> self.printWgt(wgt0)
> return _func
> 
> def funcFactory1(self,wgt0):
> import types
> def _func(self):
> self.printWgt(wgt0)
> return types.MethodType(_func,self,mainWidget)
> 
> def funcFactory1b(self):
> import types
> def _func(self):
> self.printWgt(self.dummyWgt)
> return types.MethodType(_func,self,mainWidget)
> 
> 
> class StringWidget(MyBaseWidget):
> dirChanged=QtCore.pyqtSignal(QtCore.QString)
> def initUI(self,*args,**kwargs):
> currdir=r'/tmp'
> self.currdir=currdir
> self._tb=[]
> 
> 
> completer=QtGui.QCompleter(QtCore.QStringList(['/tmp/'+i for i in 'abcdefg']), \
> parent=self) completer.setMaxVisibleItems(5)
> self.completer=completer
> 
> _tb=QtGui.QLineEdit(currdir)
> _tb.setCompleter(completer)
> 
> theLayout=QtGui.QHBoxLayout(self)
> theLayout.addWidget(_tb)
> self._tb=_tb
> 
> MyBaseWidget.initUI(self,*args,**kwargs)
> 
> class StringModelWidget(MyBaseWidget):
> dirChanged=QtCore.pyqtSignal(QtCore.QString)
> def initUI(self,*args,**kwargs):
> currdir=r'/tmp'
> self.currdir=currdir
> self._tb=[]
> 
> fsModel=QtGui.QStringListModel(['/tmp/'+i for i in 'abcdefg'])
> self.fsModel=fsModel
> #self.fsModel.setParent(self)
> 
> completer=QtGui.QCompleter()
> completer.setMaxVisibleItems(5)
> completer.setModel(fsModel)
> self.fsModel.setParent(completer)
> self.completer=completer
> 
> _tb=QtGui.QLineEdit(currdir)
> _tb.setCompleter(completer)
> 
> theLayout=QtGui.QHBoxLayout(self)
> theLayout.addWidget(_tb)
> self._tb=_tb
> 
> MyBaseWidget.initUI(self,*args,**kwargs)
> 
> 
> 
> class FileModelWidget(MyBaseWidget):
> dirChanged=QtCore.pyqtSignal(QtCore.QString)
> 
> def initUI(self,*args,**kwargs):
> currdir=r'/tmp'
> self.currdir=currdir
> self._tb=[]
> 
> fsModel=QtGui.QFileSystemModel(parent=self)
> fsModel.setRootPath('')
> fsModel.setFilter(QtCore.QDir.AllDirs|QtCore.QDir.Dirs)
> self.fsModel=fsModel
> #self.fsModel.setParent(self)
> 
> completer=QtGui.QCompleter(parent=self)
> completer.setMaxVisibleItems(5)
> completer.setModel(fsModel)
> self.fsModel.setParent(completer)
> self.completer=completer
> 
> _tb=QtGui.QLineEdit(currdir)
> _tb.setCompleter(completer)
> 
> theLayout=QtGui.QHBoxLayout(self)
> theLayout.addWidget(_tb)
> self._tb=_tb
> 
> MyBaseWidget.initUI(self,*args,**kwargs)
> 
> 
> class mainWidget(MyBaseWidget):
> 
> def initUI(self,*args,**kwargs): 
> 
> self.mainLayout=QtGui.QVBoxLayout(self)
> self.wgts=[]
> 
> _wgt0=StringWidget(self)
> self.wgts.append(_wgt0)
> 
> _wgt1=StringModelWidget(self)
> self.wgts.append(_wgt1)
> 
> 
> _wgt2=FileModelWidget()
> self.wgts.append(_wgt2)
> 
> 
> for _w in self.wgts:
> print _w
> self.mainLayout.addWidget(_w)
> MyBaseWidget.initUI(self,*args,**kwargs)
> 
> def main():
> app = QtGui.QApplication(sys.argv)
> argv=sys.argv
> mainWgt = None
> if len(argv)>1:
> nwgt = int(sys.argv[1])
> _addfunc0=nwgt/10
> _nwgt=nwgt-_addfunc0*10
> print _nwgt,_addfunc0
> if _nwgt == 0:
> _MainWgt=StringWidget
> 
> 
> if _nwgt == 1:
> _MainWgt=StringModelWidget
> 
> if _nwgt == 2:
> _MainWgt=FileModelWidget
> 
> if _nwgt == 9:
> _MainWgt=mainWidget
> print 'use %s as main widget'%(_MainWgt.__name__)
> mainWgt=_MainWgt(addfunc0=_addfunc0)
> else:
> mainWgt = mainWidget(addfunc0=0)
> 
> 
> 
> if mainWgt:
> sys.exit(app.exec_())
> 
> if __name__ == '__main__':
> main()
> 
> _______________________________________________
> PyQt mailing list    PyQt@riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt


[Attachment #5 (unknown)]

<html><head><meta http-equiv="Content-Type" content="text/html \
charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: \
space; -webkit-line-break: after-white-space; "><div>What OS, python version and PyQt \
version are you using? I'm running OSX10.8, python 2.7 and PyQt 4.9.6 and I can't \
reproduce your error.</div><br><div><div>On 25 Dec 2012, at 12:46, "^_^Sisyphus^_^" \
&lt;<a href="mailto:freesisyphuswang@gmail.com">freesisyphuswang@gmail.com</a>&gt; \
wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Dear \
all,<br><br>I create <b><i>QCompleter</i></b>s for <i><b>QLineEdit</b></i>, which \
work fine if there is no dynamically defined function/method in the subclasses (try \
to run the script with <i>./bugCompleterFilesysModel.py n</i> n in [0, 1, 2, 9], then \
try to bring up the completer by deleting some char in the LineEdit box). The \
QCompleter can work with <i><b>QStringList</b></i>, <i><b>QStringListModel</b></i>, \
and <i><b>QFileSystemModel</b></i>.<br>

<br>If I add some dynamically defined function/method in the subclass with QCompleter \
of simple <b>QStringList</b>, the instances work fine too (try to run the script with \
<i>./bugCompleterFilesysModel.py</i> n n in [10, 20, 30], then try to bring up the \
completer by deleting some char in the LineEdit box).<br>

<br>However, if I defined any function/method dynamically, the QCompleter with any \
kind of <b>data model</b>, will <b>raise an error</b> during closing the GUI \
window:<br><br><pre style="" class="default prettyprint prettyprinted"> <code><span \
class="typ">QObject</span><span class="pun">::</span><span \
class="pln">startTimer</span><span class="pun">:</span><span class="pln"> \
</span><span class="typ">QTimer</span><span class="pln"> can only be used \
</span><span class="kwd">with</span><span class="pln"> threads started </span><span \
class="kwd">with</span><span class="pln"> </span><span \
class="typ">QThread</span><span class="pln"> </span><span \
class="typ">Segmentation</span><span class="pln"> fault</span></code></pre><br>To \
repeat the error, try to run the script with <i>./bugCompleterFilesysModel.py mn</i> \
m in [1,2,3], n in [1, 2, 9], then try to bring up the completer by deleting some \
char in the LineEdit box, then close the window.<br>

<br>Can anyone tell my why is that and how to fix it? I have been scratching my head \
for hours. <br><br>Thanks ahead!<br><br>Full script of \
<i>bugCompleterFilesysModel.py</i>:<br><br><pre style="" class="default prettyprint \
prettyprinted"> <code><span class="com">#!/usr/bin/env python</span><span \
class="pln"> </span><span class="com"># -*- coding: UTF-8 -*-</span><span \
class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span \
class="typ">MyBaseWidget</span><span class="pun">(</span><span \
class="typ">QtGui</span><span class="pun">.</span><span \
class="typ">QWidget</span><span class="pun">):</span><span class="pln">  \
dirChanged</span><span class="pun">=</span><span class="typ">QtCore</span><span \
class="pun">.</span><span class="pln">pyqtSignal</span><span \
class="pun">(</span><span class="typ">QtCore</span><span class="pun">.</span><span \
class="typ">QString</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">def</span><span class="pln"> __init__</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">,</span><span \
class="pln">parent</span><span class="pun">=</span><span class="kwd">None</span><span \
class="pun">,</span><span class="pln">addfunc0</span><span class="pun">=</span><span \
class="kwd">False</span><span class="pun">,*</span><span class="pln">args</span><span \
class="pun">,**</span><span class="pln">kwargs</span><span class="pun">):</span><span \
class="pln">  </span><span class="kwd">super</span><span class="pun">(</span><span \
class="typ">MyBaseWidget</span><span class="pun">,</span><span class="pln"> \
</span><span class="kwd">self</span><span class="pun">).</span><span \
class="pln">__init__</span><span class="pun">(</span><span \
                class="pln">parent</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">addfunc0</span><span class="pun">=</span><span class="pln">addfunc0  \
</span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">func0</span><span class="pun">=</span><span class="kwd">None</span><span \
class="pln">  </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">dummyWgt</span><span class="pun">=</span><span class="lit">1</span><span \
                class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">initUI</span><span class="pun">()</span><span class="pln">

    </span><span class="kwd">def</span><span class="pln"> initUI</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">,*</span><span \
class="pln">args</span><span class="pun">,**</span><span \
                class="pln">kwargs</span><span class="pun">):</span><span \
                class="pln">
        addfunc0</span><span class="pun">=</span><span class="kwd">self</span><span \
class="pun">.</span><span class="pln">addfunc0  </span><span \
class="kwd">if</span><span class="pln"> addfunc0 </span><span \
class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span \
class="pun">:</span><span class="pln">  </span><span class="kwd">self</span><span \
class="pun">.</span><span class="pln">func0</span><span class="pun">=</span><span \
class="kwd">self</span><span class="pun">.</span><span \
class="pln">funcFactory0</span><span class="pun">(</span><span \
                class="str">'1'</span><span class="pun">)</span><span class="pln">
            _func0str</span><span class="pun">=</span><span \
class="str">"self.funcFactory0('1')"</span><span class="pln">  </span><span \
class="kwd">if</span><span class="pln"> addfunc0 </span><span \
class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span \
class="pun">:</span><span class="pln">  </span><span class="kwd">self</span><span \
class="pun">.</span><span class="pln">func0</span><span class="pun">=</span><span \
class="kwd">self</span><span class="pun">.</span><span \
class="pln">funcFactory1</span><span class="pun">(</span><span \
                class="str">'1'</span><span class="pun">)</span><span class="pln">
            _func0str</span><span class="pun">=</span><span \
class="str">"self.funcFactory1('1')"</span><span class="pln">  </span><span \
class="kwd">if</span><span class="pln"> addfunc0 </span><span \
class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span \
class="pun">:</span><span class="pln">  </span><span class="kwd">self</span><span \
class="pun">.</span><span class="pln">func0</span><span class="pun">=</span><span \
class="kwd">self</span><span class="pun">.</span><span \
                class="pln">funcFactory1b</span><span class="pun">()</span><span \
                class="pln">
            _func0str</span><span class="pun">=</span><span \
class="str">"self.funcFactory1b()"</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> addfunc0 </span><span \
class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span \
                class="pun">:</span><span class="pln">
            </span><span class="com">#print self.printWgt</span><span class="pln">
            </span><span class="kwd">print</span><span class="pln"> </span><span \
class="str">'use %s as func0'</span><span class="pun">%(</span><span \
class="pln">_func0str</span><span class="pun">)</span><span class="pln">  \
</span><span class="kwd">print</span><span class="pln"> </span><span \
class="str">'self.func0 = %s'</span><span class="pun">%(</span><span \
class="kwd">self</span><span class="pun">.</span><span class="pln">func0</span><span \
                class="pun">)</span><span class="pln">
            </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">func0</span><span class="pun">()</span><span class="pln">

        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">show</span><span class="pun">()</span><span class="pln">

    </span><span class="kwd">def</span><span class="pln"> printWgt</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">,</span><span \
class="pln">wgt0</span><span class="pun">):</span><span class="pln">  </span><span \
class="kwd">print</span><span class="pln"> </span><span class="str">'Input obj \
is:'</span><span class="pun">,</span><span class="pln"> wgt0</span><span \
class="pun">.</span><span class="pln">__class__</span><span class="pun">.</span><span \
class="pln">__name__

    </span><span class="kwd">def</span><span class="pln"> funcFactory0</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">,</span><span \
                class="pln">wgt0</span><span class="pun">):</span><span class="pln">
        </span><span class="kwd">def</span><span class="pln"> _func</span><span \
class="pun">():</span><span class="pln">  </span><span class="kwd">self</span><span \
class="pun">.</span><span class="pln">printWgt</span><span class="pun">(</span><span \
class="pln">wgt0</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">return</span><span class="pln"> _func

    </span><span class="kwd">def</span><span class="pln"> funcFactory1</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">,</span><span \
class="pln">wgt0</span><span class="pun">):</span><span class="pln">  </span><span \
class="kwd">import</span><span class="pln"> types  </span><span \
class="kwd">def</span><span class="pln"> _func</span><span class="pun">(</span><span \
class="kwd">self</span><span class="pun">):</span><span class="pln">  </span><span \
class="kwd">self</span><span class="pun">.</span><span \
class="pln">printWgt</span><span class="pun">(</span><span \
class="pln">wgt0</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">return</span><span class="pln"> types</span><span \
class="pun">.</span><span class="typ">MethodType</span><span \
class="pun">(</span><span class="pln">_func</span><span class="pun">,</span><span \
class="kwd">self</span><span class="pun">,</span><span \
class="pln">mainWidget</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">def</span><span class="pln"> funcFactory1b</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">):</span><span \
class="pln">  </span><span class="kwd">import</span><span class="pln"> types
        </span><span class="kwd">def</span><span class="pln"> _func</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">):</span><span \
class="pln">  </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">printWgt</span><span class="pun">(</span><span \
class="kwd">self</span><span class="pun">.</span><span \
class="pln">dummyWgt</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">return</span><span class="pln"> types</span><span \
class="pun">.</span><span class="typ">MethodType</span><span \
class="pun">(</span><span class="pln">_func</span><span class="pun">,</span><span \
class="kwd">self</span><span class="pun">,</span><span \
class="pln">mainWidget</span><span class="pun">)</span><span class="pln">


</span><span class="kwd">class</span><span class="pln"> </span><span \
class="typ">StringWidget</span><span class="pun">(</span><span \
class="typ">MyBaseWidget</span><span class="pun">):</span><span class="pln">  \
dirChanged</span><span class="pun">=</span><span class="typ">QtCore</span><span \
class="pun">.</span><span class="pln">pyqtSignal</span><span \
class="pun">(</span><span class="typ">QtCore</span><span class="pun">.</span><span \
class="typ">QString</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">def</span><span class="pln"> initUI</span><span class="pun">(</span><span \
class="kwd">self</span><span class="pun">,*</span><span class="pln">args</span><span \
class="pun">,**</span><span class="pln">kwargs</span><span class="pun">):</span><span \
                class="pln">
        currdir</span><span class="pun">=</span><span class="pln">r</span><span \
                class="str">'/tmp'</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
                class="pln">currdir</span><span class="pun">=</span><span \
                class="pln">currdir
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">_tb</span><span class="pun">=[]</span><span class="pln">


        completer</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QCompleter</span><span \
class="pun">(</span><span class="typ">QtCore</span><span class="pun">.</span><span \
class="typ">QStringList</span><span class="pun">([</span><span \
class="str">'/tmp/'</span><span class="pun">+</span><span class="pln">i </span><span \
class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span \
class="pln"> </span><span class="str">'abcdefg'</span><span \
class="pun">]),</span><span class="pln"> parent</span><span class="pun">=</span><span \
class="kwd">self</span><span class="pun">)</span><span class="pln">  \
completer</span><span class="pun">.</span><span \
class="pln">setMaxVisibleItems</span><span class="pun">(</span><span \
                class="lit">5</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">completer</span><span class="pun">=</span><span class="pln">completer

        _tb</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QLineEdit</span><span class="pun">(</span><span \
class="pln">currdir</span><span class="pun">)</span><span class="pln">  \
_tb</span><span class="pun">.</span><span class="pln">setCompleter</span><span \
class="pun">(</span><span class="pln">completer</span><span class="pun">)</span><span \
class="pln">

        theLayout</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QHBoxLayout</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">)</span><span \
class="pln">  theLayout</span><span class="pun">.</span><span \
class="pln">addWidget</span><span class="pun">(</span><span \
                class="pln">_tb</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">_tb</span><span class="pun">=</span><span class="pln">_tb

        </span><span class="typ">MyBaseWidget</span><span class="pun">.</span><span \
class="pln">initUI</span><span class="pun">(</span><span class="kwd">self</span><span \
class="pun">,*</span><span class="pln">args</span><span class="pun">,**</span><span \
class="pln">kwargs</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span \
class="typ">StringModelWidget</span><span class="pun">(</span><span \
class="typ">MyBaseWidget</span><span class="pun">):</span><span class="pln">  \
dirChanged</span><span class="pun">=</span><span class="typ">QtCore</span><span \
class="pun">.</span><span class="pln">pyqtSignal</span><span \
class="pun">(</span><span class="typ">QtCore</span><span class="pun">.</span><span \
class="typ">QString</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">def</span><span class="pln"> initUI</span><span class="pun">(</span><span \
class="kwd">self</span><span class="pun">,*</span><span class="pln">args</span><span \
class="pun">,**</span><span class="pln">kwargs</span><span class="pun">):</span><span \
                class="pln">
        currdir</span><span class="pun">=</span><span class="pln">r</span><span \
                class="str">'/tmp'</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
                class="pln">currdir</span><span class="pun">=</span><span \
                class="pln">currdir
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">_tb</span><span class="pun">=[]</span><span class="pln">

        fsModel</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QStringListModel</span><span \
class="pun">([</span><span class="str">'/tmp/'</span><span class="pun">+</span><span \
class="pln">i </span><span class="kwd">for</span><span class="pln"> i </span><span \
class="kwd">in</span><span class="pln"> </span><span \
                class="str">'abcdefg'</span><span class="pun">])</span><span \
                class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
                class="pln">fsModel</span><span class="pun">=</span><span \
                class="pln">fsModel
        </span><span class="com">#self.fsModel.setParent(self)</span><span \
class="pln">

        completer</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QCompleter</span><span \
class="pun">()</span><span class="pln">  completer</span><span \
class="pun">.</span><span class="pln">setMaxVisibleItems</span><span \
class="pun">(</span><span class="lit">5</span><span class="pun">)</span><span \
class="pln">  completer</span><span class="pun">.</span><span \
class="pln">setModel</span><span class="pun">(</span><span \
class="pln">fsModel</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">self</span><span class="pun">.</span><span \
class="pln">fsModel</span><span class="pun">.</span><span \
class="pln">setParent</span><span class="pun">(</span><span \
                class="pln">completer</span><span class="pun">)</span><span \
                class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">completer</span><span class="pun">=</span><span class="pln">completer

        _tb</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QLineEdit</span><span class="pun">(</span><span \
class="pln">currdir</span><span class="pun">)</span><span class="pln">  \
_tb</span><span class="pun">.</span><span class="pln">setCompleter</span><span \
class="pun">(</span><span class="pln">completer</span><span class="pun">)</span><span \
class="pln">

        theLayout</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QHBoxLayout</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">)</span><span \
class="pln">  theLayout</span><span class="pun">.</span><span \
class="pln">addWidget</span><span class="pun">(</span><span \
                class="pln">_tb</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">_tb</span><span class="pun">=</span><span class="pln">_tb

        </span><span class="typ">MyBaseWidget</span><span class="pun">.</span><span \
class="pln">initUI</span><span class="pun">(</span><span class="kwd">self</span><span \
class="pun">,*</span><span class="pln">args</span><span class="pun">,**</span><span \
class="pln">kwargs</span><span class="pun">)</span><span class="pln">



</span><span class="kwd">class</span><span class="pln"> </span><span \
class="typ">FileModelWidget</span><span class="pun">(</span><span \
class="typ">MyBaseWidget</span><span class="pun">):</span><span class="pln">  \
dirChanged</span><span class="pun">=</span><span class="typ">QtCore</span><span \
class="pun">.</span><span class="pln">pyqtSignal</span><span \
class="pun">(</span><span class="typ">QtCore</span><span class="pun">.</span><span \
class="typ">QString</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">def</span><span class="pln"> initUI</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">,*</span><span \
class="pln">args</span><span class="pun">,**</span><span \
                class="pln">kwargs</span><span class="pun">):</span><span \
                class="pln">
        currdir</span><span class="pun">=</span><span class="pln">r</span><span \
                class="str">'/tmp'</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
                class="pln">currdir</span><span class="pun">=</span><span \
                class="pln">currdir
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">_tb</span><span class="pun">=[]</span><span class="pln">

        fsModel</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QFileSystemModel</span><span \
class="pun">(</span><span class="pln">parent</span><span class="pun">=</span><span \
class="kwd">self</span><span class="pun">)</span><span class="pln">  \
fsModel</span><span class="pun">.</span><span class="pln">setRootPath</span><span \
class="pun">(</span><span class="str">''</span><span class="pun">)</span><span \
class="pln">  fsModel</span><span class="pun">.</span><span \
class="pln">setFilter</span><span class="pun">(</span><span \
class="typ">QtCore</span><span class="pun">.</span><span class="typ">QDir</span><span \
class="pun">.</span><span class="typ">AllDirs</span><span class="pun">|</span><span \
class="typ">QtCore</span><span class="pun">.</span><span class="typ">QDir</span><span \
class="pun">.</span><span class="typ">Dirs</span><span class="pun">)</span><span \
                class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
                class="pln">fsModel</span><span class="pun">=</span><span \
                class="pln">fsModel
        </span><span class="com">#self.fsModel.setParent(self)</span><span \
class="pln">

        completer</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QCompleter</span><span \
class="pun">(</span><span class="pln">parent</span><span class="pun">=</span><span \
class="kwd">self</span><span class="pun">)</span><span class="pln">  \
completer</span><span class="pun">.</span><span \
class="pln">setMaxVisibleItems</span><span class="pun">(</span><span \
class="lit">5</span><span class="pun">)</span><span class="pln">  \
completer</span><span class="pun">.</span><span class="pln">setModel</span><span \
class="pun">(</span><span class="pln">fsModel</span><span class="pun">)</span><span \
class="pln">  </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">fsModel</span><span class="pun">.</span><span \
class="pln">setParent</span><span class="pun">(</span><span \
                class="pln">completer</span><span class="pun">)</span><span \
                class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">completer</span><span class="pun">=</span><span class="pln">completer

        _tb</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QLineEdit</span><span class="pun">(</span><span \
class="pln">currdir</span><span class="pun">)</span><span class="pln">  \
_tb</span><span class="pun">.</span><span class="pln">setCompleter</span><span \
class="pun">(</span><span class="pln">completer</span><span class="pun">)</span><span \
class="pln">

        theLayout</span><span class="pun">=</span><span class="typ">QtGui</span><span \
class="pun">.</span><span class="typ">QHBoxLayout</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">)</span><span \
class="pln">  theLayout</span><span class="pun">.</span><span \
class="pln">addWidget</span><span class="pun">(</span><span \
                class="pln">_tb</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">_tb</span><span class="pun">=</span><span class="pln">_tb

        </span><span class="typ">MyBaseWidget</span><span class="pun">.</span><span \
class="pln">initUI</span><span class="pun">(</span><span class="kwd">self</span><span \
class="pun">,*</span><span class="pln">args</span><span class="pun">,**</span><span \
class="pln">kwargs</span><span class="pun">)</span><span class="pln">


</span><span class="kwd">class</span><span class="pln"> mainWidget</span><span \
class="pun">(</span><span class="typ">MyBaseWidget</span><span \
class="pun">):</span><span class="pln">

    </span><span class="kwd">def</span><span class="pln"> initUI</span><span \
class="pun">(</span><span class="kwd">self</span><span class="pun">,*</span><span \
class="pln">args</span><span class="pun">,**</span><span \
class="pln">kwargs</span><span class="pun">):</span><span class="pln"> 

        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">mainLayout</span><span class="pun">=</span><span \
class="typ">QtGui</span><span class="pun">.</span><span \
class="typ">QVBoxLayout</span><span class="pun">(</span><span \
                class="kwd">self</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">wgts</span><span class="pun">=[]</span><span class="pln">

        _wgt0</span><span class="pun">=</span><span \
class="typ">StringWidget</span><span class="pun">(</span><span \
class="kwd">self</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">self</span><span class="pun">.</span><span class="pln">wgts</span><span \
class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span \
class="pln">_wgt0</span><span class="pun">)</span><span class="pln">

        _wgt1</span><span class="pun">=</span><span \
class="typ">StringModelWidget</span><span class="pun">(</span><span \
class="kwd">self</span><span class="pun">)</span><span class="pln">  </span><span \
class="kwd">self</span><span class="pun">.</span><span class="pln">wgts</span><span \
class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span \
class="pln">_wgt1</span><span class="pun">)</span><span class="pln">


        _wgt2</span><span class="pun">=</span><span \
class="typ">FileModelWidget</span><span class="pun">()</span><span class="pln">  \
</span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">wgts</span><span class="pun">.</span><span class="pln">append</span><span \
class="pun">(</span><span class="pln">_wgt2</span><span class="pun">)</span><span \
class="pln">


        </span><span class="kwd">for</span><span class="pln"> _w </span><span \
class="kwd">in</span><span class="pln"> </span><span class="kwd">self</span><span \
class="pun">.</span><span class="pln">wgts</span><span class="pun">:</span><span \
class="pln">  </span><span class="kwd">print</span><span class="pln"> _w
            </span><span class="kwd">self</span><span class="pun">.</span><span \
class="pln">mainLayout</span><span class="pun">.</span><span \
class="pln">addWidget</span><span class="pun">(</span><span \
class="pln">_w</span><span class="pun">)</span><span class="pln">  </span><span \
class="typ">MyBaseWidget</span><span class="pun">.</span><span \
class="pln">initUI</span><span class="pun">(</span><span class="kwd">self</span><span \
class="pun">,*</span><span class="pln">args</span><span class="pun">,**</span><span \
class="pln">kwargs</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> main</span><span \
class="pun">():</span><span class="pln">  app </span><span class="pun">=</span><span \
class="pln"> </span><span class="typ">QtGui</span><span class="pun">.</span><span \
class="typ">QApplication</span><span class="pun">(</span><span \
class="pln">sys</span><span class="pun">.</span><span class="pln">argv</span><span \
class="pun">)</span><span class="pln">  argv</span><span class="pun">=</span><span \
class="pln">sys</span><span class="pun">.</span><span class="pln">argv  mainWgt \
</span><span class="pun">=</span><span class="pln"> </span><span \
class="kwd">None</span><span class="pln">  </span><span class="kwd">if</span><span \
class="pln"> len</span><span class="pun">(</span><span class="pln">argv</span><span \
class="pun">)&gt;</span><span class="lit">1</span><span class="pun">:</span><span \
class="pln">  nwgt </span><span class="pun">=</span><span class="pln"> </span><span \
class="kwd">int</span><span class="pun">(</span><span class="pln">sys</span><span \
class="pun">.</span><span class="pln">argv</span><span class="pun">[</span><span \
                class="lit">1</span><span class="pun">])</span><span class="pln">
        _addfunc0</span><span class="pun">=</span><span class="pln">nwgt</span><span \
class="pun">/</span><span class="lit">10</span><span class="pln">  _nwgt</span><span \
class="pun">=</span><span class="pln">nwgt</span><span class="pun">-</span><span \
class="pln">_addfunc0</span><span class="pun">*</span><span \
                class="lit">10</span><span class="pln">
        </span><span class="kwd">print</span><span class="pln"> _nwgt</span><span \
class="pun">,</span><span class="pln">_addfunc0  </span><span \
class="kwd">if</span><span class="pln"> _nwgt </span><span class="pun">==</span><span \
class="pln"> </span><span class="lit">0</span><span class="pun">:</span><span \
                class="pln">
            </span><span class="typ">_MainWgt</span><span class="pun">=</span><span \
class="typ">StringWidget</span><span class="pln">


        </span><span class="kwd">if</span><span class="pln"> _nwgt </span><span \
class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span \
                class="pun">:</span><span class="pln">
            </span><span class="typ">_MainWgt</span><span class="pun">=</span><span \
class="typ">StringModelWidget</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> _nwgt </span><span \
class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span \
                class="pun">:</span><span class="pln">
            </span><span class="typ">_MainWgt</span><span class="pun">=</span><span \
class="typ">FileModelWidget</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> _nwgt </span><span \
class="pun">==</span><span class="pln"> </span><span class="lit">9</span><span \
                class="pun">:</span><span class="pln">
            </span><span class="typ">_MainWgt</span><span class="pun">=</span><span \
class="pln">mainWidget  </span><span class="kwd">print</span><span class="pln"> \
</span><span class="str">'use %s as main widget'</span><span \
class="pun">%(</span><span class="typ">_MainWgt</span><span class="pun">.</span><span \
class="pln">__name__</span><span class="pun">)</span><span class="pln">  \
mainWgt</span><span class="pun">=</span><span class="typ">_MainWgt</span><span \
class="pun">(</span><span class="pln">addfunc0</span><span class="pun">=</span><span \
class="pln">_addfunc0</span><span class="pun">)</span><span class="pln">  \
</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">  \
mainWgt </span><span class="pun">=</span><span class="pln"> mainWidget</span><span \
class="pun">(</span><span class="pln">addfunc0</span><span class="pun">=</span><span \
class="lit">0</span><span class="pun">)</span><span class="pln">



    </span><span class="kwd">if</span><span class="pln"> mainWgt</span><span \
class="pun">:</span><span class="pln">  sys</span><span class="pun">.</span><span \
class="kwd">exit</span><span class="pun">(</span><span class="pln">app</span><span \
class="pun">.</span><span class="pln">exec_</span><span class="pun">())</span><span \
class="pln">

</span><span class="kwd">if</span><span class="pln"> __name__ </span><span \
class="pun">==</span><span class="pln"> </span><span \
class="str">'__main__'</span><span class="pun">:</span><span class="pln">  \
main</span><span class="pun">()</span></code></pre><br> \
_______________________________________________<br>PyQt mailing list \
&nbsp;&nbsp;&nbsp;<a \
href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><br><a \
href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a></blockquote></div><br></body></html>




_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://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