Почему прямоугольник частично за пределами видимого треугольника?
Я использую привязки Python-Qt от PySide, и я хочу нарисовать сцену, среди прочего, прямоугольник, и прямоугольник не полностью виден, потому что в представлении должна отображаться только часть сцены, где прямоугольник не полностью содержится.
Вот минимальный пример:
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_()
Я ожидаю увидеть нижнюю часть прямоугольника, вместо этого вижу нижнюю часть треугольника!
![enter image description here]()
Похоже, что нижний правый угол прямоугольника не учитывается.
Треугольник появляется только для особых случаев (например, специальный сценарий в примере) и никогда не возникает, если видны полный прямоугольник.
Является ли это ошибкой или я делаю что-то неправильно? Может ли быть исправлено?
Моя система: Python 3.3 + PySide 1.2.2 (64 бит) в Windows 7
Ответы
Ответ 1
Это была ошибка, и в то же время она исправлена, по крайней мере, для некоторых комбинаций Qt и Python.
Теперь я использую Windows 10, Python 3.5, PyQt5, а прямоугольник показан как прямоугольник.
Трудно узнать, для каких версий PySide/PyQt и Qt 4.X или 5.x и Python 2.X или 3.X или Windows, Linux, Mac.. ошибка присутствует и для которой нет. Я не допустил ошибку, но думаю, так как он работает прямо сейчас с тем, что у меня ошибка, не будет приоритетом для кого-либо и/или может быть уже исправлена.
Ответ 2
Попробуйте рисовать прямоугольник с помощью
import pygame
pygame.draw.rect(x, y, width, length)
Посмотрите, работает ли это. Это определенно ошибка, поэтому обходите ее.
Ответ 3
Была та же проблема. Он работает, если вы используете виджет GL:
from PySide import QtOpenGL
view.setViewport(QtOpenGL.QGLWidget())
(Python 2.7.6, PySide 1.2.1 x64 (Qt 4.8.5) в Windows 7)
Ответ 4
Попробуйте:
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()