Уведомления

Группа в Telegram: @pythonsu

#1 Май 18, 2018 18:34:32

GS
Зарегистрирован: 2018-05-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как очистить старую графическую сцену scene = QGraphicsScene(self) при повторном входе

Добрый день
PyQt5, Питон 3.4.
Создаю сцену в новом окне, рисую линии и пишу тексты. При повторном входе сохраняется старые рисунки.
Понимаю, что в ините надо бы сцену почистить или создавать заново, но не получается этого сделать. Первая программа и в основном компилируется из примеров методом тыка.
Создаю так
self.widget = GraphWidget()
self.widget.setGeometry(100, 100, 600, 600)
self.widget.show()
…………
class GraphWidget(QGraphicsView):
def __init__(self):
super(GraphWidget, self).__init__()
self.timerId = 0
scene = QGraphicsScene(self)
scene.setItemIndexMethod(QGraphicsScene.NoIndex)

Офлайн

#2 Май 18, 2018 19:01:07

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Как очистить старую графическую сцену scene = QGraphicsScene(self) при повторном входе

QList<QGraphicsItem *> QGraphicsScene::items () const
Возвращает список элементов на сцене в произвольном порядке.
Смотрите также addItem() и removeItem()
void QGraphicsScene::clear()
Removes and deletes all items from the scene, but otherwise leaves the state of the scene unchanged.

Отредактировано vic57 (Май 18, 2018 19:04:02)

Офлайн

#3 Май 18, 2018 21:54:45

GS
Зарегистрирован: 2018-05-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как очистить старую графическую сцену scene = QGraphicsScene(self) при повторном входе

vic57
void QGraphicsScene::clear()
У меня в питоне с voidом напряженка.

Офлайн

#4 Май 19, 2018 02:12:22

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Как очистить старую графическую сцену scene = QGraphicsScene(self) при повторном входе

RTFM

 >>> from PyQt5 import Qt
>>> help(Qt.QGraphicsScene.clear)
Help on built-in function clear:
clear(...)
    clear(self)
>>> 

Офлайн

#5 Май 19, 2018 10:39:28

GS
Зарегистрирован: 2018-05-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как очистить старую графическую сцену scene = QGraphicsScene(self) при повторном входе

После добавления
from PyQt5 import Qt
выдает
File “C:\Program Files\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py”, line 220, in __init__
builtins.AttributeError: ‘module’ object has no attribute ‘AlignLeading’

220 self.label.setAlignment(Qt.AlignLeading|Qt.AlignRight|Qt.AlignTop)
PS. Ошибки синтаксиса в конце концов удалось победить хоть и не так как в хелпе. Но толку ноль. Непонятно вообще куда очистку сцены вставлять. Наверно надо как-то эту сцену закрывать и открывать новую. Но как? В общем как-то даже странно.

Отредактировано GS (Май 19, 2018 22:12:04)

Офлайн

#6 Май 20, 2018 00:00:33

GS
Зарегистрирован: 2018-05-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как очистить старую графическую сцену scene = QGraphicsScene(self) при повторном входе

Какая глупая ошибка. Понятно почему не чистилась сцена. Только когда сделал пример, где сцена чистилась, а потом стал закрашивать всю сцену, но изображений все равно было два, до меня дошло: Я передавал координаты через глобальный список, но на новой картинке список не обнулял и она добавлялась после старой. Жертва appenda.
Кстати сцена чистится командой:
self.scene = QGraphicsScene()
…………………………………………..
self.scene.clear()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version