Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged'
Forum Updated to NodeBB v4.3 + New Features

AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged'

Scheduled Pinned Locked Moved Solved Qt for Python
14 Posts 4 Posters 3.6k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Ed Schneider

    @jeremy_k It's not in my code. It looks like it's in pyqtgraph. Here's more info from the traceback. File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\312\Lib\site-packages\pyqtgraph\graphicsItems\GraphicsLayout.py", line 136, in addItem
    item.geometryChanged.connect(self._updateItemBorder)
    ^^^^^^^^^^^^^^^^^^^^

    JonBJ Online
    JonBJ Online
    JonB
    wrote on last edited by
    #4

    @Ed-Schneider
    But it depends on what your code does that can lead to such an error, especially in Python.

    Could you be in the situation described in 'ScatterPlotItem' object has no attribute 'geometryChanged' which generates exactly your error?

    E 1 Reply Last reply
    0
    • JonBJ JonB

      @Ed-Schneider
      But it depends on what your code does that can lead to such an error, especially in Python.

      Could you be in the situation described in 'ScatterPlotItem' object has no attribute 'geometryChanged' which generates exactly your error?

      E Offline
      E Offline
      Ed Schneider
      wrote on last edited by
      #5

      @JonI've been doing handstands to see if I could see a situation where my code would control whether an object has an attribute. The only thing I came up with is when the class which my object is an instance of does not have an attribute 'geometryChanged'. In my situation the offending object "container" appears to be an instance of the QWidget class. I'm trying to avoid putting my plot directly onto the GraphicsLayoutWidget. This seems to be what the solution is also suggesting in "ScatterPlotItem...." , so I thought I was avoiding/addressing this issue. Here's what I used -
      container = QWidget() # Create a container widget
      layout = QVBoxLayout() # Create a vertical box layout
      layout.addWidget(self.graphWidget)
      container.setLayout(layout)

      	return container
      

      The exception happens when "container" is passed as "plot_item"
      Here's the entire traceback.

      Traceback (most recent call last):
      File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 7079, in <lambda>
      lambda: self.traffic_control("open_configuration"))
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 6381, in traffic_control
      self.this_instance.execute(self.common)
      File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 13233, in execute
      self._director.configuration_active.create_a_configuration_plot_for_plot_and_gallery_tabs(
      File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 2225, in create_a_configuration_plot_for_plot_and_gallery_tabs
      director.plot_to_gui_from_pyqtgraph_ai_assistant(new_fig)
      File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 5969, in plot_to_gui_from_pyqtgraph_ai_assistant
      widget_plot.addItem(plot_item)
      File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\312\Lib\site-packages\pyqtgraph\graphicsItems\GraphicsLayout.py", line 136, in addItem
      item.geometryChanged.connect(self._updateItemBorder)
      ^^^^^^^^^^^^^^^^^^^^
      AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged'

      jeremy_kJ 1 Reply Last reply
      0
      • E Ed Schneider

        @JonI've been doing handstands to see if I could see a situation where my code would control whether an object has an attribute. The only thing I came up with is when the class which my object is an instance of does not have an attribute 'geometryChanged'. In my situation the offending object "container" appears to be an instance of the QWidget class. I'm trying to avoid putting my plot directly onto the GraphicsLayoutWidget. This seems to be what the solution is also suggesting in "ScatterPlotItem...." , so I thought I was avoiding/addressing this issue. Here's what I used -
        container = QWidget() # Create a container widget
        layout = QVBoxLayout() # Create a vertical box layout
        layout.addWidget(self.graphWidget)
        container.setLayout(layout)

        	return container
        

        The exception happens when "container" is passed as "plot_item"
        Here's the entire traceback.

        Traceback (most recent call last):
        File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 7079, in <lambda>
        lambda: self.traffic_control("open_configuration"))
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 6381, in traffic_control
        self.this_instance.execute(self.common)
        File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 13233, in execute
        self._director.configuration_active.create_a_configuration_plot_for_plot_and_gallery_tabs(
        File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 2225, in create_a_configuration_plot_for_plot_and_gallery_tabs
        director.plot_to_gui_from_pyqtgraph_ai_assistant(new_fig)
        File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\src\Rubicon_12.py", line 5969, in plot_to_gui_from_pyqtgraph_ai_assistant
        widget_plot.addItem(plot_item)
        File "C:\Users\E_J_S\OneDrive\Documents\Projects\Python\NewWorld\312\Lib\site-packages\pyqtgraph\graphicsItems\GraphicsLayout.py", line 136, in addItem
        item.geometryChanged.connect(self._updateItemBorder)
        ^^^^^^^^^^^^^^^^^^^^
        AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged'

        jeremy_kJ Offline
        jeremy_kJ Offline
        jeremy_k
        wrote on last edited by
        #6

        @Ed-Schneider said in AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged':

        The only thing I came up with is when the class which my object is an instance of does not have an attribute 'geometryChanged'.

        That's the symptom.

        In my situation the offending object "container" appears to be an instance of the QWidget class. I'm trying to avoid putting my plot directly onto the GraphicsLayoutWidget.

        Why? I'm presuming that the error is in reference to this GraphicsLayout:

        Used for laying out GraphicsWidgets in a grid.

        Trying to add a non-GraphicsWidget appears to be contrary to the expectation of the class.

        Here's what I used -

          container = QWidget()  # Create a container widget
          layout = QVBoxLayout()  # Create a vertical box layout
          layout.addWidget(self.graphWidget)
          container.setLayout(layout)
        
          return container
        

        The exception happens when "container" is passed as "plot_item"

        This isn't enough code to make a meaningful guess. Also, please use code tags ( </> in the tool bar).

        Is this the PlotItem referred to?

        GraphicsWidget implementing a standard 2D plotting area with axes.

        Note that it says GraphicsWidget, not QWidget.

        Asking a question about code? http://eel.is/iso-c++/testcase/

        E 1 Reply Last reply
        0
        • jeremy_kJ jeremy_k

          @Ed-Schneider said in AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged':

          The only thing I came up with is when the class which my object is an instance of does not have an attribute 'geometryChanged'.

          That's the symptom.

          In my situation the offending object "container" appears to be an instance of the QWidget class. I'm trying to avoid putting my plot directly onto the GraphicsLayoutWidget.

          Why? I'm presuming that the error is in reference to this GraphicsLayout:

          Used for laying out GraphicsWidgets in a grid.

          Trying to add a non-GraphicsWidget appears to be contrary to the expectation of the class.

          Here's what I used -

            container = QWidget()  # Create a container widget
            layout = QVBoxLayout()  # Create a vertical box layout
            layout.addWidget(self.graphWidget)
            container.setLayout(layout)
          
            return container
          

          The exception happens when "container" is passed as "plot_item"

          This isn't enough code to make a meaningful guess. Also, please use code tags ( </> in the tool bar).

          Is this the PlotItem referred to?

          GraphicsWidget implementing a standard 2D plotting area with axes.

          Note that it says GraphicsWidget, not QWidget.

          E Offline
          E Offline
          Ed Schneider
          wrote on last edited by
          #7

          @jeremy_k The full application is more than 17,000 lines. Here's the function which creates and returns container. The returned variable becomes "new_fig". New_fig is then passed as an argument to another function in which it is called "plot_item". When plot_item is passed to addItem, the result is the exception. Here's the basic code . I've tried several variations which is why some statements are commented out

          	def plot_a_configuration(self, director, common):
          
          		# self.graphWidget = pg.GraphicsWidget()
          		self.graphWidget = pg.PlotWidget()
          		# director.setCentralWidget(self.graphWidget)
          
          		x = [director.configuration_active.point_coords.iloc[each_point]
          			.iloc[director.configuration_active.hor_dim]
          			for each_point in director.configuration_active.range_points]
          		y = [director.configuration_active.point_coords.iloc[each_point]
          			.iloc[director.configuration_active.vert_dim]
          			for each_point in director.configuration_active.range_points]
          
          		common.show_connector = True
          		common.show_bisector = True
          		director.configuration_active.rival_a = 2
          		director.configuration_active.rival_b = 4
          		director.configuration_active.bisector_start_x = -1.1
          		director.configuration_active.bisector_end_x = .65
          		director.configuration_active.bisector_start_y = self.vert_min
          		director.configuration_active.bisector_end_y = self.vert_max
          
          		self.graphWidget.setBackground('w')
          		self.graphWidget.setTitle("Candidates", color="k", size="20pt")
          		styles = {'color': 'k', 'font-size': '15pt'}
          		self.graphWidget.setLabel(
          			'left', director.configuration_active.dim_names[self.vert_dim])
          		self.graphWidget.setLabel(
          			'bottom',  director.configuration_active.dim_names[self.hor_dim])
          
          
          		self.graphWidget.showGrid(x=True, y=True)
          		self.graphWidget.setXRange(
          			director.configuration_active.hor_min,
          			director.configuration_active.hor_max, padding=None)
          		self.graphWidget.setYRange(
          			director.configuration_active.vert_min,
          			director.configuration_active.vert_max, padding=None)
          
          		# for each_label in self.range_points:
          		for each_label in director.configuration_active.range_points:
          			self.a_label = pg.TextItem(
          				text=director.configuration_active.point_labels[each_label],
          				color="k", anchor=(.5, 1),
          				border='w', fill=None)
          			self.a_label.setPos(
          				x[each_label],
          				y[each_label])
          			self.graphWidget.addItem(self.a_label)
          		pen = pg.mkPen(color=(255, 0, 0))
          		self.graphWidget.scatterPlot(x, y, pen=pen, symbol='o',
          			symbolSize=5, symbolBrush='k')
          		if common.show_connector:
          			self.graphWidget.plot(
          				[x[director.configuration_active.rival_a],
          				x[director.configuration_active.rival_b]],
          				[y[director.configuration_active.rival_a],
          				y[director.configuration_active.rival_b]], pen=pen)
          		if common.show_bisector:
          			self.graphWidget.plot(
          				[director.configuration_active.bisector_start_x,
          				 director.configuration_active.bisector_end_x],
          				[director.configuration_active.bisector_start_y,
          				 director.configuration_active.bisector_end_y], pen=pen)
          		container = QWidget()  # Create a container widget
          		# container = pg.GraphicsWidget()
          		layout = QVBoxLayout()  # Create a vertical box layout
          		layout.addWidget(self.graphWidget)
          		container.setLayout(layout)
          
          		return container
          
          jeremy_kJ 1 Reply Last reply
          0
          • E Ed Schneider

            @jeremy_k The full application is more than 17,000 lines. Here's the function which creates and returns container. The returned variable becomes "new_fig". New_fig is then passed as an argument to another function in which it is called "plot_item". When plot_item is passed to addItem, the result is the exception. Here's the basic code . I've tried several variations which is why some statements are commented out

            	def plot_a_configuration(self, director, common):
            
            		# self.graphWidget = pg.GraphicsWidget()
            		self.graphWidget = pg.PlotWidget()
            		# director.setCentralWidget(self.graphWidget)
            
            		x = [director.configuration_active.point_coords.iloc[each_point]
            			.iloc[director.configuration_active.hor_dim]
            			for each_point in director.configuration_active.range_points]
            		y = [director.configuration_active.point_coords.iloc[each_point]
            			.iloc[director.configuration_active.vert_dim]
            			for each_point in director.configuration_active.range_points]
            
            		common.show_connector = True
            		common.show_bisector = True
            		director.configuration_active.rival_a = 2
            		director.configuration_active.rival_b = 4
            		director.configuration_active.bisector_start_x = -1.1
            		director.configuration_active.bisector_end_x = .65
            		director.configuration_active.bisector_start_y = self.vert_min
            		director.configuration_active.bisector_end_y = self.vert_max
            
            		self.graphWidget.setBackground('w')
            		self.graphWidget.setTitle("Candidates", color="k", size="20pt")
            		styles = {'color': 'k', 'font-size': '15pt'}
            		self.graphWidget.setLabel(
            			'left', director.configuration_active.dim_names[self.vert_dim])
            		self.graphWidget.setLabel(
            			'bottom',  director.configuration_active.dim_names[self.hor_dim])
            
            
            		self.graphWidget.showGrid(x=True, y=True)
            		self.graphWidget.setXRange(
            			director.configuration_active.hor_min,
            			director.configuration_active.hor_max, padding=None)
            		self.graphWidget.setYRange(
            			director.configuration_active.vert_min,
            			director.configuration_active.vert_max, padding=None)
            
            		# for each_label in self.range_points:
            		for each_label in director.configuration_active.range_points:
            			self.a_label = pg.TextItem(
            				text=director.configuration_active.point_labels[each_label],
            				color="k", anchor=(.5, 1),
            				border='w', fill=None)
            			self.a_label.setPos(
            				x[each_label],
            				y[each_label])
            			self.graphWidget.addItem(self.a_label)
            		pen = pg.mkPen(color=(255, 0, 0))
            		self.graphWidget.scatterPlot(x, y, pen=pen, symbol='o',
            			symbolSize=5, symbolBrush='k')
            		if common.show_connector:
            			self.graphWidget.plot(
            				[x[director.configuration_active.rival_a],
            				x[director.configuration_active.rival_b]],
            				[y[director.configuration_active.rival_a],
            				y[director.configuration_active.rival_b]], pen=pen)
            		if common.show_bisector:
            			self.graphWidget.plot(
            				[director.configuration_active.bisector_start_x,
            				 director.configuration_active.bisector_end_x],
            				[director.configuration_active.bisector_start_y,
            				 director.configuration_active.bisector_end_y], pen=pen)
            		container = QWidget()  # Create a container widget
            		# container = pg.GraphicsWidget()
            		layout = QVBoxLayout()  # Create a vertical box layout
            		layout.addWidget(self.graphWidget)
            		container.setLayout(layout)
            
            		return container
            
            jeremy_kJ Offline
            jeremy_kJ Offline
            jeremy_k
            wrote on last edited by
            #8

            @Ed-Schneider said in AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged':

            @jeremy_k The full application is more than 17,000 lines.

            Understood, but while you are faced with narrowing down a code base that is too large to post, readers are left guessing at the infinite possibilities of code that they can't read. It's the original poster's job to do the hard work of formulating a reasonably complete and self contained question.

            Here's the function which creates and returns container. The returned variable becomes "new_fig". New_fig is then passed as an argument to another function in which it is called "plot_item". When plot_item is passed to addItem, the result is the exception.

            The type of the object which addItem() belongs to is an important missing piece. Most of the code, including setting labels and ranges, isn't relevant for this question.

            Asking a question about code? http://eel.is/iso-c++/testcase/

            E 1 Reply Last reply
            0
            • jeremy_kJ jeremy_k

              @Ed-Schneider said in AttributeError: 'PySide6.QtWidgets.QWidget' object has no attribute 'geometryChanged':

              @jeremy_k The full application is more than 17,000 lines.

              Understood, but while you are faced with narrowing down a code base that is too large to post, readers are left guessing at the infinite possibilities of code that they can't read. It's the original poster's job to do the hard work of formulating a reasonably complete and self contained question.

              Here's the function which creates and returns container. The returned variable becomes "new_fig". New_fig is then passed as an argument to another function in which it is called "plot_item". When plot_item is passed to addItem, the result is the exception.

              The type of the object which addItem() belongs to is an important missing piece. Most of the code, including setting labels and ranges, isn't relevant for this question.

              E Offline
              E Offline
              Ed Schneider
              wrote on last edited by
              #9

              @jeremy_k I understand your point. On my list of todo's is to put together a small file with all the relevant information. Unfortunately I'm in the midst of some massive reactoring which I want to complete before I create that small file. With luck I'll get to that within a week. In the mean time here is the code of the function which has the addItem which raises the exception. I understand this code will not work even after the initial addItem issue is solved. I'll fix that once the initial problem is resolved.

              	def plot_to_gui_from_pyqtgraph_ai_assistant(self, plot_item):
              		print(f"DEBUG -- at top of plot_to_gui_from_pyqtgraph_ai_assistant {plot_item=}")
              		# Create a GraphicsLayoutWidget to place your pyqtgraph plot onto
              		widget_plot = GraphicsLayoutWidget()
              
              		# Add your plot_item to the GraphicsLayoutWidget
              		widget_plot.addItem(plot_item)
              
              		self.tab_plot_scroll_area.setWidget(widget_plot)
              
              		# plot_item_clone = deepcopy(plot_item)
              
              		# Repeat the process for the Gallery tab
              		widget_gallery = GraphicsLayoutWidget()
              		# widget_gallery.addItem(plot_item_clone)
              		self.tab_gallery_layout.addWidget(widget_gallery)
              
              		# Add a spacer at the end to push plots to the top
              		spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
              		self.tab_gallery_layout.addItem(spacer)
              
              1 Reply Last reply
              0
              • E Offline
                E Offline
                Ed Schneider
                wrote on last edited by
                #10

                @jeremy_k I put together a file with all the relevant information. In the process I was able to get the plots to appear in the tabs but with two problems. The Plot tab works correctly with subsequent plots replacing previous ones. The Gallery plot should be scrollable with all plots appearing with a spacer between them. I am unable to get the spacer to work at all. In the attached code I've commented out the spacer line to at least get it to run. I've also included the matplotlib code to show what I would like it to be doing. I've commented out the matplotlib code to allow the pyqtgraph code to run. Any insight into how to make the pyqtgraph code work like the matplotlib code would be appreciated.

                import sys
                from PySide6.QtWidgets import QApplication, QTabWidget, QWidget, QScrollArea
                import matplotlib.pyplot as plt
                from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
                from PySide6.QtWidgets import QVBoxLayout, QSpacerItem, QSizePolicy, QMainWindow
                import pyqtgraph as pg
                from pyqtgraph import GraphicsLayoutWidget, PlotWidget
                class TabbedWindow(QMainWindow):
                	def __init__(self):
                		super(TabbedWindow, self).__init__()
                		self.setWindowTitle("Tabbed Window")
                		self.setGeometry(100, 100, 800, 600)
                		self.tab_widget = QTabWidget()
                		self.setCentralWidget(self.tab_widget)
                		self.tab_widget.setTabPosition(QTabWidget.South)
                
                		self.tab_plot_scroll_area = QScrollArea()
                		self.tab_gallery_widget = QWidget()
                		self.tab_gallery_layout = QVBoxLayout()
                		self.tab_gallery_widget.setLayout(self.tab_gallery_layout)
                
                		self.tab_gallery_scroll_area = QScrollArea()
                		self.tab_gallery_scroll_area.setWidgetResizable(True)
                		self.tab_gallery_scroll_area.setWidget(self.tab_gallery_widget)
                
                		self.tab_widget.addTab(self.tab_plot_scroll_area, "Plot")
                		self.tab_widget.addTab(self.tab_gallery_scroll_area, "Gallery")
                
                	def add_plot_using_pyqtgraph(self, plot_widget1, plot_widget2):
                		# Add the plot to the Plot tab (replace the current plot)
                		self.tab_plot_scroll_area.setWidget(plot_widget1)
                
                		# Add the plot to the Gallery tab (append to existing plots)
                		self.tab_gallery_scroll_area.setWidget(plot_widget2)
                
                		# Add a spacer at the end to push plots to the top
                		spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
                		# self.tab_gallery_scroll_area.addItem(spacer)
                
                	def add_plot_using_matplotlib(self, fig):
                		# Add the plot to the Plot tab (replace the current plot)
                		canvas_plot = FigureCanvas(fig)
                		width, height = int(fig.get_size_inches()[0] * fig.dpi), int(fig.get_size_inches()[1] * fig.dpi)
                		canvas_plot.setFixedSize(width, height)
                		canvas_plot.draw()
                		self.tab_plot_scroll_area.setWidget(canvas_plot)
                
                		# Add the plot to the Gallery tab (append to existing plots)
                		canvas_gallery = FigureCanvas(fig)
                		canvas_gallery.setFixedSize(width, height)
                		canvas_gallery.draw()
                		self.tab_gallery_layout.addWidget(canvas_gallery)
                
                		# Add a spacer at the end to push plots to the top
                		spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
                		self.tab_gallery_layout.addItem(spacer)
                
                def example_plot_A_using_matplotlib():
                	fig, ax = plt.subplots()
                	ax.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
                	ax.set_title('Example Plot A using Matplotlib')
                	ax.set_xlabel('X-axis')
                	ax.set_ylabel('Y-axis')
                	return fig
                
                def example_plot_B_using_matplotlib():
                	fig, ax = plt.subplots()
                	ax.plot([16, 9, 4, 1], [1, 2, 3, 4], 'ro')
                	ax.set_title('Example Plot B using Matplotlib')
                	ax.set_xlabel('X-axis')
                	ax.set_ylabel('Y-axis')
                	return fig
                def example_plot_A_using_pyqtgraph():
                	win = pg.GraphicsLayoutWidget()
                	p1 = win.addPlot(title="Example Plot A using pyqtgraph")
                	p1.scatterPlot([1, 2, 3, 4], [1, 4, 9, 16], symbol='o')
                	win.setBackground('w')
                	p1.setLabel('left', 'Y-axis', units='A')
                	p1.setLabel('bottom', 'X-axis', units='s')
                	return win
                
                def example_plot_B_using_pyqtgraph():
                	win = pg.GraphicsLayoutWidget()
                	p1 = win.addPlot(title="Example Plot B using pyqtgraph")
                	p1.scatterPlot([16, 9, 4, 1], [1, 2, 3, 4],  symbol='o')
                	win.setBackground('w')
                	p1.setLabel('left', 'Y-axis', units='A')
                	p1.setLabel('bottom', 'X-axis', units='s')
                	return win
                
                if __name__ == "__main__":
                	app = QApplication(sys.argv)
                	window = TabbedWindow()
                
                	# fig = example_plot_A_using_matplotlib()
                	# window.add_plot_using_matplotlib(fig)
                	# fig = example_plot_B_using_matplotlib()
                	# window.add_plot_using_matplotlib(fig)
                
                	A_plot = example_plot_A_using_pyqtgraph()
                	same_plot_A_gallery = example_plot_A_using_pyqtgraph()
                	B_plot = example_plot_B_using_pyqtgraph()
                	same_plot_B_gallery = example_plot_B_using_pyqtgraph()
                	window.add_plot_using_pyqtgraph(A_plot, same_plot_A_gallery)
                	window.add_plot_using_pyqtgraph(B_plot, same_plot_B_gallery)
                	
                	window.show()
                	sys.exit(app.exec())
                
                1 Reply Last reply
                0
                • E Offline
                  E Offline
                  Ed Schneider
                  wrote on last edited by
                  #11

                  I worked with PyCharm's Ai Assistant and solved the problem. Here are the modifications needed to what I posted previously. It also freezes tab_gallery so it serves as a historical record while tab_plot is still modifiable.

                  code_tex	def add_plot_using_pyqtgraph(self, plot_widget1, plot_widget2):
                  		# Add the plot to the Plot tab (replace the current plot)
                  		self.tab_plot_scroll_area.setWidget(plot_widget1)
                  		# Disable mouse events on the plot in tab_gallery
                  		# Disable mouse events on all plots in plot_widget2
                  		disable_mouse_events(plot_widget2)
                  		# Add the plot to the Gallery tab (append to existing plots)
                  		widget = QWidget()
                  		widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
                  		layout = QVBoxLayout()
                  		layout.addWidget(plot_widget2)
                  		layout.setSizeConstraint(QVBoxLayout.SetNoConstraint)
                  		# self.tab_gallery_scroll_area.setWidget(plot_widget2)
                  
                  		# Add a spacer at the end to push plots to the top
                  		spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
                  		layout.addItem(spacer)
                  
                  		widget.setLayout(layout)
                  		self.tab_gallery_layout.addWidget(widget)
                  
                  
                  
                  def disable_mouse_events(graphics_layout_widget):
                  	# Loop over each row
                  	for row in range(graphics_layout_widget.ci.layout.rowCount()):
                  		# Loop over each column
                  		for col in range(graphics_layout_widget.ci.layout.columnCount()):
                  			# Get the item in the cell
                  			item = graphics_layout_widget.ci.layout.itemAt(row, col)
                  			# Check if item is a PlotItem
                  			if isinstance(item, pg.graphicsItems.PlotItem.PlotItem):
                  				# Disable mouse events for this PlotItem
                  				item.vb.setMouseEnabled(x=False, y=False)t
                  
                  1 Reply Last reply
                  0
                  • E Offline
                    E Offline
                    Ed Schneider
                    wrote on last edited by
                    #12

                    How can we get this switched from unsolved to solved? Is this something I can do as the author, or is this something a moderator needs to do?

                    SGaistS 1 Reply Last reply
                    0
                    • E Ed Schneider

                      How can we get this switched from unsolved to solved? Is this something I can do as the author, or is this something a moderator needs to do?

                      SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #13

                      @Ed-Schneider hi,

                      As the author of the thread, you can do it yourself. Click on the cog button and you will have an option near the bottom of the menu to mark the thread as solved.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      1
                      • E Offline
                        E Offline
                        Ed Schneider
                        wrote on last edited by
                        #14

                        Thanks. Will do

                        1 Reply Last reply
                        0
                        • E Ed Schneider has marked this topic as solved on

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved