2014-09-18 23 views
16

Uso i collegamenti Python-Qt da PySide e voglio disegnare una scena con tra gli altri un rettangolo e il rettangolo non è completamente visibile perché la vista dovrebbe mostrare solo una parte della scena in cui il rettangolo non è completamente contenuto.Perché un rettangolo è parzialmente fuori dalla vista disegnato come un triangolo?

Ecco un esempio minimo:

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_() 

Mi aspetto di vedere la parte inferiore di un rettangolo invece vedo la parte inferiore di un triangolo!

enter image description here

Sembra che l'angolo in basso a destra del rettangolo non viene presa in considerazione.

Il triangolo appare solo per casi speciali (come la scena speciale rect nell'esempio) e non si verifica mai se il rettangolo completo è visibile.

È un errore o sto facendo qualcosa di sbagliato? Può essere risolto?

Il mio sistema: Python 3.3 + PySide 1.2.2 (64 bit) su Windows 7

+0

Perché usi -60? – vahancho

+0

L'errore va via con 'view.setSceneRect (-10, -10, 120, 120)'? –

+0

@vahancho Perché mostra il triangolo per -60. Non sempre lo fa. Aggiornerò la domanda un po 'con queste informazioni – Trilarion

risposta

0

Era un bug ed è stato risolto nel frattempo, almeno per alcune combinazioni di Qt e Python.

Ora utilizzo Windows 10, Python 3.5, PyQt5 e il rettangolo è mostrato come rettangolo.

È difficile trovare le versioni di PySide/PyQt e Qt 4.X o 5.xe Python 2.X o 3.X o Windows, Linux, Mac .. il bug è presente e per quale no . Non ho erportato l'errore ma credo che dal momento che funzioni proprio con quello che ho il bug non sarebbe la massima priorità per nessuno e/o potrebbe essere già stato risolto.

0

provare a disegnare il rettangolo con

import pygame 

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

vedere se funziona. Questo è sicuramente un bug, quindi aggiralo.

0

Aveva lo stesso problema. Funziona se si utilizza un widget di GL:

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

(Python 2.7.6, PySide 1.2.1 x64 (Qt 4.8.5) su Windows 7)

0

Prova:

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

Quello che sta succedendo per te è un bug –