Python 在不更改现有图形颜色的情况下更改新图形的颜色
下面给出的代码是从on SO派生的。它显示一个Python 在不更改现有图形颜色的情况下更改新图形的颜色,python,pyqt5,Python,Pyqt5,下面给出的代码是从on SO派生的。它显示一个qmain窗口,其中4个QGraphicsView用于使用鼠标进行绘制,一个QPushButton用于清除4个QGraphicsView,一个QPushButton用于获取新的随机绘制颜色 目标:我希望在不更改现有图形颜色的情况下更改未来图形的颜色 尝试:更改QPen对象的颜色会立即更改已绘制图形的颜色。因此,我用新的QPen对象和新的颜色创建了新的GraphicsPathItem对象来避免这种情况 问题:更改颜色后,QGraphicsView中的现
qmain窗口
,其中4个QGraphicsView
用于使用鼠标进行绘制,一个QPushButton
用于清除4个QGraphicsView
,一个QPushButton
用于获取新的随机绘制颜色
目标:我希望在不更改现有图形颜色的情况下更改未来图形的颜色
尝试:更改QPen
对象的颜色会立即更改已绘制图形的颜色。因此,我用新的QPen
对象和新的颜色创建了新的GraphicsPathItem
对象来避免这种情况
问题:更改颜色后,QGraphicsView
中的现有图形的颜色会在再次绘制某个图形时立即更改
如何解决这个问题
main.py
mainwindow.ui
主窗口
0
0
800
600
油漆和清洁
清楚的
新随机颜色
0
0
800
24
每次创建新项目时,您仍在使用相同的QPainterPath,因此您看到的不是应用于现有“图形”上的新颜色,而是仍然使用其中先前路径的新QGraphicsPathItem项目
通过在每次创建新项目时创建新路径,您可以轻松解决问题:
def new_item(self, color):
self.item = GraphicsPathItem(color)
self.scene().addItem(self.item)
self.path = QPainterPath()
每个帖子一个问题,如果你还有其他问题,你必须创建另一个问题,因为这是SO的规则。
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Paint and Clear</string>
</property>
<property name="locale">
<locale language="English" country="UnitedKingdom"/>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<layout class="QVBoxLayout" name="verticalLayout_bottom_left"/>
</item>
<item row="2" column="1">
<layout class="QVBoxLayout" name="verticalLayout_bottom_right"/>
</item>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_top_left"/>
</item>
<item row="0" column="1">
<layout class="QVBoxLayout" name="verticalLayout_top_right"/>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="clear_button">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="color_button">
<property name="text">
<string>New random color</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>24</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
def new_item(self, color):
self.item = GraphicsPathItem(color)
self.scene().addItem(self.item)
self.path = QPainterPath()