2014-09-18 8 views
16

Ich benutze die Python-Qt-Bindungen von PySide und möchte eine Szene mit ua einem Rechteck zeichnen und das Rechteck ist nicht vollständig sichtbar, da die Ansicht nur einen Teil der Szene zeigen sollte, in der das Rechteck nicht vollständig enthalten ist.Warum wird ein Rechteck teilweise außerhalb der Ansicht als Dreieck gezeichnet?

Hier ist ein minimales Beispiel:

from PySide.QtGui import * 

app = QApplication([]) 

scene = QGraphicsScene() 
scene.addRect(0, 0, 100, 100) 
view = QGraphicsView(scene) 
view.setSceneRect(-60, 20, 100, 100) 
view.show() 

app.exec_() 

Ich erwarte, dass der untere Teil eines Rechtecks, um zu sehen, anstatt ich den unteren Teil eines Dreiecks sehen!

enter image description here

Es ist wie die rechte untere Ecke des Rechtecks ​​scheint nicht berücksichtigt.

Das Dreieck erscheint nur für spezielle Fälle (wie die Spezialszene rect im Beispiel) und tritt nie auf, wenn das volle Rechteck sichtbar ist.

Ist das ein Fehler oder mache ich etwas falsch? Kann es repariert werden?

Mein System: Python 3.3 + pyside 1.2.2 (64 Bit) auf Windows 7

+0

Warum verwenden Sie -60? – vahancho

+0

Geht der Fehler mit 'view.setSceneRect (-10, -10, 120, 120) 'verloren? –

+0

@vahancho Weil es das Dreieck für -60 zeigt. Es tut es nicht immer. Ich werde die Frage ein wenig mit diesen Informationen aktualisieren. – Trilarion

Antwort

0

Es war ein Bug und ist inzwischen behoben, zumindest für einige Kombinationen von Qt und Python.

Ich benutze jetzt Windows 10, Python 3.5, PyQt5 und das Rechteck wird als Rechteck angezeigt.

Es ist schwierig herauszufinden, für welche Versionen von PySide/PyQt und Qt 4.X oder 5.x und Python 2.X oder 3.X oder Windows, Linux, Mac .. der Bug vorhanden ist und für welche nicht . Ich habe den Fehler nicht erportiert, aber ich denke, da es jetzt mit dem funktioniert, was ich habe, wäre der Bug für niemanden oberste Priorität und/oder könnte bereits behoben sein.

0

Versuchen Sie das Rechteck mit

import pygame 

pygame.draw.rect(x, y, width, length) 

Zeichnung sehen, ob das funktioniert. Dies ist definitiv ein Fehler, also umgehen Sie es.

0

Hatte das gleiche Problem. Es funktioniert, wenn Sie einen GL-Widget verwenden:

from PySide import QtOpenGL 
view.setViewport(QtOpenGL.QGLWidget()) 

(Python 2.7.6, 1.2.1 pyside x64 (Qt 4.8.5) unter Windows 7)

0

Versuchen:

import pygame 
from livewires import * 
rectangle = rect(x, y, width, height) #note that the size is in pixels 

while not keyboard.is_pressed(K_escape) 
    rectangle.erase() 
    rectangle.draw() 
    screen.update() 
+1

Was für dich passiert ist ein Fehler –

Verwandte Themen