Python 在不更改现有图形颜色的情况下更改新图形的颜色

Python 在不更改现有图形颜色的情况下更改新图形的颜色,python,pyqt5,Python,Pyqt5,下面给出的代码是从on SO派生的。它显示一个qmain窗口,其中4个QGraphicsView用于使用鼠标进行绘制,一个QPushButton用于清除4个QGraphicsView,一个QPushButton用于获取新的随机绘制颜色 目标:我希望在不更改现有图形颜色的情况下更改未来图形的颜色 尝试:更改QPen对象的颜色会立即更改已绘制图形的颜色。因此,我用新的QPen对象和新的颜色创建了新的GraphicsPathItem对象来避免这种情况 问题:更改颜色后,QGraphicsView中的现

下面给出的代码是从on SO派生的。它显示一个
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()