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

List:       pykde
Subject:    [PyQt] QGraphicsItem collidingItems dont work
From:       leo kirotawa <kirotawa () gmail ! com>
Date:       2010-10-23 20:09:10
Message-ID: AANLkTi=qZUtdEvdGAzTgfCuKL5JmFRB1-ZJHNmhY-1TP () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hi,

I'm trying make a detection collision between graphicsitem, but when I use
the method collidingItems it show collisions with all object in the scene.
My scene have 800, 600 and my boundingRect to meu player object have the
same size. What I thinking is happend is that my method shape are not
override this way it just call the boundingRect and make the collision traet
with it.

A piece of my code;

BoundingRect = QtCore.QRectF(-20 - adjust, -22 - adjust,
                                 800 + adjust, 600 + adjust)

def boundingRect(self):
return Monster.BoundingRect
def shape(self):
        path = QtGui.QPainterPath()
        path.addRect(0, 0, 150, 150) #determina o shape, que sera base para
detectar colissoes.
         return path
by the way I am send all code to be easy see the problem. Just replace the
images.
[]'s


import sys
import math
from PyQt4 import QtCore, QtGui

class Monster(QtGui.QGraphicsItem):
adjust = 0.5
     BoundingRect = QtCore.QRectF(-20 - adjust, -22 - adjust,
                                 800 + adjust, 600 + adjust)
speed = 8

def __init__(self):
         QtGui.QGraphicsItem.__init__(self)
self.image = QtGui.QImage()
self.image.load("monstrinhofree.png")
self.image = self.image.scaled(100, 100, QtCore.Qt.KeepAspectRatio)
self.image2 = QtGui.QImage()
self.image2.load("monstrinhofree1.png")
self.image2 = self.image2.scaled(100,100, QtCore.Qt.KeepAspectRatio)
self.xpos, self.ypos = 344,520
self.frameControl = True
self.timer = QtCore.QTimer()
QtCore.QObject.connect(self.timer, QtCore.SIGNAL('timeout()'),
                               self.timerEvent)
self.timer.start(150)
 def boundingRect(self):
return Monster.BoundingRect
 def shape(self):
        path = QtGui.QPainterPath()
        path.addRect(0, 0, 150, 150) #determina o shape, que sera base para
detectar colissoes.
         return path


def paint(self,painter, option, widget):
 #nuvem = QtGui.QImage()
#nuvem.load("images/nuven.png")
#nuvem2 = QtGui.QImage()
#nuvem2.load("images/nuven2.png")
if self.frameControl:
painter.drawImage(self.xpos,self.ypos,self.image)
self.frameControl = False
else:
painter.drawImage(self.xpos,self.ypos,self.image2)
self.frameControl = True
#painter.drawImage(360,24,nuvem)
#painter.drawImage(504, 90,nuvem2)
#print self.xpos, self.ypos
#print dir(self.shape())
#items = self.scene().items(self.shape(), QtCore.Qt.IntersectsItemShape)
#print items
if self.collidingItems():
print self.collidingItems()[0]
#print "chocou"
control = False
#def update(self):
def timerEvent(self):
self.update()
 def keyPressEvent(self,event):
 key = event.key()
         if key == QtCore.Qt.Key_Left:
if self.xpos > 0:
         self.xpos -= Monster.speed
         elif key == QtCore.Qt.Key_Right:
if self.xpos < 680:
self.xpos += Monster.speed
elif key == QtCore.Qt.Key_Down:
if self.ypos < 520:
self.ypos += Monster.speed
elif key == QtCore.Qt.Key_Up:
if self.ypos > 0:
self.ypos -= Monster.speed
#else:
# QtGui.QGraphicsItem.keyPressEvent(self, event)
def mousePressEvent(self, event):
print "mouse funfa"


class Clouds(QtGui.QGraphicsItem):
adjust = 0.5
     BoundingRect = QtCore.QRectF(-20 - adjust, -22 - adjust,
                                 100 + adjust, 100 + adjust)
def __init__(self):
         QtGui.QGraphicsItem.__init__(self)
self.cloud1 = QtGui.QImage()
self.cloud1.load("images/nuven.png")
self.cloud2 = QtGui.QImage()
self.cloud2.load("images/nuven2.png")

def boundingRect(self):
return Clouds.BoundingRect
def shape(self):
        path = QtGui.QPainterPath()
        path.addRect(-10, -20, 228, 97) #determina o shape, que sera base
para detectar colissoes.
         return path
def paint(self,painter, option, widget):
painter.drawImage(360,24,self.cloud1)
painter.drawImage(504, 90,self.cloud2)
#if self.scene().collidingItems(self):
#print self.scene().collidingItems(self)[0]
class Scene(QtGui.QGraphicsScene):
def __init__(self):
QtGui.QGraphicsScene.__init__(self)
self.fun = None
def keyPressEvent(self,event):
self.func(event)
def setKeyPressEventItem(self,func):
self.func = func


class View(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.setCacheMode(QtGui.QGraphicsView.CacheBackground)
         self.setRenderHints(QtGui.QPainter.Antialiasing)
def drawBackground(self, painter, rect):
pixmap = QtGui.QImage("images/background3.png")
 #print pixmap
srect = self.sceneRect()
painter.drawImage(-5,-5,pixmap)
#print "draw"


if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    QtCore.qsrand(QtCore.QTime(0,0,0).secsTo(QtCore.QTime.currentTime()))

    scene = Scene()#QtGui.QGraphicsScene()
    scene.setSceneRect(0,0, 790, 590)
    scene.setItemIndexMethod(QtGui.QGraphicsScene.NoIndex)
    monster = Monster()
    scene.setKeyPressEventItem(monster.keyPressEvent)
    scene.addItem(monster)
    clouds = Clouds()
    scene.addItem(clouds)
    view = View()#QtGui.QGraphicsView(scene)
    view.setScene(scene)
    #view.setRenderHint(QtGui.QPainter.Antialiasing)
    #view.setBackgroundBrush(QtGui.QColor(230, 200, 167))
    #view.setRenderHints(QtGui.QPainter.Antialiasing)
    #pixmap = QtGui.QImage("images/background.png")


   # view.setBackgroundBrush(QtGui.QBrush(pixmap))
    #view.setCacheMode(QtGui.QGraphicsView.CacheBackground)
    view.setWindowTitle("Ensl Game")
    #view.setWindowTitle(QtCore.QT_TRANSLATE_NOOP(QtGui.QGraphicsView,
"Colliding Mice"))
    view.resize(800, 600)
    view.show()

-- 
Leônidas S. Barbosa (Kirotawa)
[DesenvolvedorWeb/CEFET/RN]
[Ciências da Computação/UFRN]
[pós-graduando em Inteligência Computacional/Processamento Gráfico /UFRN
[Estudante de japonês nível Intermediário I  - Japanese Student]
[Desenvolvedor em python, PyGame]
blog nerd: corecode.wordpress.com/
blog music: essenaomanja.blogspot.com
blog tirinhas: elminiche.wordpress.com/

"Mais sábio é aquele que sabe que não sabe" (Sócrates)

日本語の学生です。
コンピュータサイエンスの学位.

[Attachment #5 (text/html)]

Hi,<div><br></div><div>I&#39;m trying make a detection collision between \
graphicsitem, but when I use the method  collidingItems it show collisions with all \
object in the scene.</div><div>My scene have 800, 600 and my boundingRect to meu \
player object have the same size. What I thinking is happend is that my method shape \
are not override this way it just call the  boundingRect and make the collision traet \
with it.  </div> <div><br></div><div>A piece of my \
code;</div><div><br></div><div><div>BoundingRect = QtCore.QRectF(-20 - adjust, -22 - \
adjust,</div><div>                                                  800 + adjust, 600 \
+ adjust)</div><div><br></div><div> <div>def boundingRect(self):</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>return \
Monster.BoundingRect</div><div>def shape(self):</div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>            path = \
QtGui.QPainterPath()</div> <div><span class="Apple-tab-span" \
style="white-space:pre">	</span>            path.addRect(0, 0, 150, 150) #determina o \
shape, que sera base para detectar colissoes.</div><div>             <span \
class="Apple-tab-span" style="white-space:pre">	</span>return path  </div> </div>by \
the way I am send all code to be easy see the problem. Just replace the \
images.</div><div>[]&#39;s</div><div><br></div><div><br></div><div><div>import \
sys</div><div>import math</div><div>from PyQt4 import QtCore, QtGui</div> \
<div><br></div><div>class Monster(QtGui.QGraphicsItem):</div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>adjust = 0.5</div><div>       \
<span class="Apple-tab-span" style="white-space:pre">	</span>BoundingRect = \
QtCore.QRectF(-20 - adjust, -22 - adjust,</div> <div>                                 \
800 + adjust, 600 + adjust)</div><div><span class="Apple-tab-span" \
style="white-space:pre">	</span>speed = 8</div><div><br></div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>def __init__(self):</div> \
<div>             <span class="Apple-tab-span" \
style="white-space:pre">	</span>QtGui.QGraphicsItem.__init__(self)</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>self.image = \
QtGui.QImage()</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.image.load(&quot;monstrinhofree.png&quot;)</div>
 <div><span class="Apple-tab-span" style="white-space:pre">		</span>self.image = \
self.image.scaled(100, 100, QtCore.Qt.KeepAspectRatio)</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>self.image2 = \
QtGui.QImage()</div> <div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.image2.load(&quot;monstrinhofree1.png&quot;)</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>self.image2 = \
self.image2.scaled(100,100, QtCore.Qt.KeepAspectRatio)</div> <div><span \
class="Apple-tab-span" style="white-space:pre">		</span>self.xpos, self.ypos = \
344,520</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.frameControl = True<span class="Apple-tab-span" \
style="white-space:pre">		</span></div> <div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.timer = QtCore.QTimer()</div><div><span \
class="Apple-tab-span" \
style="white-space:pre">		</span>QtCore.QObject.connect(self.timer, \
QtCore.SIGNAL(&#39;timeout()&#39;),</div> <div>                                       \
self.timerEvent)</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.timer.start(150)</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span></div> <div><span \
class="Apple-tab-span" style="white-space:pre">	</span>def \
boundingRect(self):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>return Monster.BoundingRect</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span></div> <div><span \
class="Apple-tab-span" style="white-space:pre">	</span>def \
shape(self):</div><div><span class="Apple-tab-span" style="white-space:pre">	</span>  \
path = QtGui.QPainterPath()</div><div><span class="Apple-tab-span" \
style="white-space:pre">	</span>            path.addRect(0, 0, 150, 150) #determina o \
shape, que sera base para detectar colissoes.</div> <div>             <span \
class="Apple-tab-span" style="white-space:pre">	</span>return path  \
</div><div><br></div><div><br></div><div><span class="Apple-tab-span" \
style="white-space:pre">	</span>def paint(self,painter, option, widget):</div> \
<div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>#nuvem = \
QtGui.QImage()</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#nuvem.load(&quot;images/nuven.png&quot;)</div> \
<div><span class="Apple-tab-span" style="white-space:pre">		</span>#nuvem2 = \
QtGui.QImage()</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#nuvem2.load(&quot;images/nuven2.png&quot;)</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>if self.frameControl:</div> \
<div><span class="Apple-tab-span" \
style="white-space:pre">			</span>painter.drawImage(self.xpos,self.ypos,self.image)</div><div><span \
class="Apple-tab-span" style="white-space:pre">			</span>self.frameControl = \
False</div> <div><span class="Apple-tab-span" \
style="white-space:pre">		</span>else:</div><div><span class="Apple-tab-span" \
style="white-space:pre">			</span>painter.drawImage(self.xpos,self.ypos,self.image2)</div><div><span \
class="Apple-tab-span" style="white-space:pre">			</span>self.frameControl = \
True</div> <div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#painter.drawImage(360,24,nuvem)</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>#painter.drawImage(504, \
90,nuvem2)</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#print self.xpos, self.ypos</div> <div><span \
class="Apple-tab-span" style="white-space:pre">		</span>#print \
dir(self.shape())</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#items = self.scene().items(self.shape(), \
QtCore.Qt.IntersectsItemShape)<span class="Apple-tab-span" \
style="white-space:pre">	</span></div> <div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#print items<span class="Apple-tab-span" \
style="white-space:pre">	</span></div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>if self.collidingItems():</div> <div><span \
class="Apple-tab-span" style="white-space:pre">			</span>print \
self.collidingItems()[0]</div><div><span class="Apple-tab-span" \
style="white-space:pre">			</span>#print &quot;chocou&quot;</div><div><span \
class="Apple-tab-span" style="white-space:pre">			</span>control = False</div> \
<div><span class="Apple-tab-span" style="white-space:pre">	</span>#def \
update(self):</div><div><span class="Apple-tab-span" \
style="white-space:pre">	</span>def timerEvent(self):</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>self.update()</div> \
<div><span class="Apple-tab-span" style="white-space:pre">	</span></div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>def \
keyPressEvent(self,event):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span></div> <div><span class="Apple-tab-span" \
style="white-space:pre">		</span>key = event.key()</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span></div><div>             <span \
class="Apple-tab-span" style="white-space:pre">	</span>if key == \
QtCore.Qt.Key_Left:</div> <div><span class="Apple-tab-span" \
style="white-space:pre">			</span>if self.xpos &gt; 0:</div><div>             <span \
class="Apple-tab-span" style="white-space:pre">			</span>self.xpos -= \
Monster.speed</div><div>             <span class="Apple-tab-span" \
style="white-space:pre">	</span>elif key == QtCore.Qt.Key_Right:</div> <div><span \
class="Apple-tab-span" style="white-space:pre">			</span>if self.xpos &lt; 680:<span \
class="Apple-tab-span" style="white-space:pre">		</span></div><div><span \
class="Apple-tab-span" style="white-space:pre">				</span>self.xpos += Monster.speed  \
</div> <div><span class="Apple-tab-span" style="white-space:pre">		</span>elif key == \
QtCore.Qt.Key_Down:</div><div><span class="Apple-tab-span" \
style="white-space:pre">			</span>if self.ypos &lt; 520:<span class="Apple-tab-span" \
style="white-space:pre">		</span></div> <div><span class="Apple-tab-span" \
style="white-space:pre">				</span>self.ypos += Monster.speed</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>elif key == \
QtCore.Qt.Key_Up:</div><div><span class="Apple-tab-span" \
style="white-space:pre">			</span>if self.ypos &gt; 0:</div> <div><span \
class="Apple-tab-span" style="white-space:pre">				</span>self.ypos -= \
Monster.speed</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#else:</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#<span class="Apple-tab-span" \
style="white-space:pre">	</span>QtGui.QGraphicsItem.keyPressEvent(self, event)</div> \
<div><span class="Apple-tab-span" style="white-space:pre">	</span>def \
mousePressEvent(self, event):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>print &quot;mouse funfa&quot;</div><div><br></div> \
<div><br></div><div>class Clouds(QtGui.QGraphicsItem):</div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>adjust = 0.5</div><div>       \
<span class="Apple-tab-span" style="white-space:pre">	</span>BoundingRect = \
QtCore.QRectF(-20 - adjust, -22 - adjust,</div> <div>                                 \
100 + adjust, 100 + adjust)</div><div><span class="Apple-tab-span" \
style="white-space:pre">	</span>def __init__(self):</div><div>             <span \
class="Apple-tab-span" \
style="white-space:pre">	</span>QtGui.QGraphicsItem.__init__(self)</div> <div><span \
class="Apple-tab-span" style="white-space:pre">		</span>self.cloud1 = \
QtGui.QImage()</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.cloud1.load(&quot;images/nuven.png&quot;)</div><div>
 <span class="Apple-tab-span" style="white-space:pre">		</span>self.cloud2 = \
QtGui.QImage()</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.cloud2.load(&quot;images/nuven2.png&quot;)</div><div>
 <br></div><div><span class="Apple-tab-span" style="white-space:pre">	</span>def \
boundingRect(self):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>return Clouds.BoundingRect</div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>def shape(self):</div> \
<div><span class="Apple-tab-span" style="white-space:pre">	</span>            path = \
QtGui.QPainterPath()</div><div><span class="Apple-tab-span" \
style="white-space:pre">	</span>            path.addRect(-10, -20, 228, 97) \
#determina o shape, que sera base para detectar colissoes.</div> <div>             \
<span class="Apple-tab-span" style="white-space:pre">	</span>return path  \
</div><div><span class="Apple-tab-span" style="white-space:pre">	</span>def \
paint(self,painter, option, widget):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>painter.drawImage(360,24,self.cloud1)</div> \
<div><span class="Apple-tab-span" \
style="white-space:pre">		</span>painter.drawImage(504, \
90,self.cloud2)</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>#if self.scene().collidingItems(self):</div> \
<div><span class="Apple-tab-span" style="white-space:pre">			</span>#print \
self.scene().collidingItems(self)[0]</div><div>class \
Scene(QtGui.QGraphicsScene):</div><div><span class="Apple-tab-span" \
style="white-space:pre">	</span>def __init__(self):</div> <div><span \
class="Apple-tab-span" \
style="white-space:pre">		</span>QtGui.QGraphicsScene.__init__(self)</div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>self.fun = \
None</div><div><span class="Apple-tab-span" style="white-space:pre">	</span>def \
keyPressEvent(self,event):</div> <div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.func(event)</div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>def \
setKeyPressEventItem(self,func):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>self.func = func</div> \
<div><br></div><div><br></div><div>class View(QtGui.QGraphicsView):</div><div><span \
class="Apple-tab-span" style="white-space:pre">	</span>def \
__init__(self):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>QtGui.QGraphicsView.__init__(self)</div> <div><span \
class="Apple-tab-span" \
style="white-space:pre">		</span>self.setCacheMode(QtGui.QGraphicsView.CacheBackground)</div><div> \
<span class="Apple-tab-span" \
style="white-space:pre">	</span>self.setRenderHints(QtGui.QPainter.Antialiasing)</div>
 <div><span class="Apple-tab-span" style="white-space:pre">	</span>def \
drawBackground(self, painter, rect):</div><div><span class="Apple-tab-span" \
style="white-space:pre">		</span>pixmap = \
QtGui.QImage(&quot;images/background3.png&quot;)</div> <div><span \
class="Apple-tab-span" style="white-space:pre">			</span></div><div><span \
class="Apple-tab-span" style="white-space:pre">		</span>#print pixmap<span \
class="Apple-tab-span" style="white-space:pre">		</span></div> <div><span \
class="Apple-tab-span" style="white-space:pre">		</span>srect = self.sceneRect()<span \
class="Apple-tab-span" style="white-space:pre">		</span></div><div><span \
class="Apple-tab-span" \
style="white-space:pre">		</span>painter.drawImage(-5,-5,pixmap)</div> <div><span \
class="Apple-tab-span" style="white-space:pre">		</span>#print \
&quot;draw&quot;</div><div><br></div><div><br></div><div>if __name__ == \
&quot;__main__&quot;:</div><div>       </div><div>       app = \
QtGui.QApplication(sys.argv)</div> <div>       \
QtCore.qsrand(QtCore.QTime(0,0,0).secsTo(QtCore.QTime.currentTime()))</div><div><br></div><div> \
scene = Scene()#QtGui.QGraphicsScene()</div><div>       scene.setSceneRect(0,0, 790, \
590)</div><div>       scene.setItemIndexMethod(QtGui.QGraphicsScene.NoIndex)</div> \
<div>       monster = Monster()</div><div>       \
scene.setKeyPressEventItem(monster.keyPressEvent)</div><div>       \
scene.addItem(monster)</div><div>       clouds = Clouds()</div><div>       \
scene.addItem(clouds)</div><div>       view = View()#QtGui.QGraphicsView(scene)</div> \
<div>       view.setScene(scene)</div><div>       \
<div>       #pixmap = QtGui.QImage(&quot;images/background.png&quot;)</div><div>      \
</div><div>    </div><div>     # \
view.setBackgroundBrush(QtGui.QBrush(pixmap))</div><div>       \
#view.setCacheMode(QtGui.QGraphicsView.CacheBackground)</div> <div>       \
view.setWindowTitle(&quot;Ensl Game&quot;)</div><div>       \
#view.setWindowTitle(QtCore.QT_TRANSLATE_NOOP(QtGui.QGraphicsView, &quot;Colliding \
Mice&quot;))</div><div>       view.resize(800, 600)</div><div>       \
view.show()</div> <div><br></div>-- <br>Leônidas S. Barbosa \
(Kirotawa)<br>[DesenvolvedorWeb/CEFET/RN]<br>[Ciências da \
Computação/UFRN]<br>[pós-graduando em Inteligência Computacional/Processamento \
Gráfico /UFRN<br>[Estudante de japonês nível Intermediário I   - Japanese \
Student]<br> [Desenvolvedor em python, PyGame]<br>blog nerd: <a \
href="http://corecode.wordpress.com/" \
target="_blank">corecode.wordpress.com/</a><br>blog music: <a \
href="http://essenaomanja.blogspot.com" \
target="_blank">essenaomanja.blogspot.com</a><div> blog tirinhas: <a \
href="http://elminiche.wordpress.com/" \
target="_blank">elminiche.wordpress.com/</a><br><br>&quot;Mais sábio é aquele que \
sabe que não sabe&quot; \
(Sócrates)<br><br>日本語の学生です。<br>コンピュータサイエンスの学位.<br></div><br>


</div>



_______________________________________________
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