gpt4 book ai didi

python - 无法根据 PYQT 小部件状态更改删除并重绘或绘制绘图轴

转载 作者:太空宇宙 更新时间:2023-11-03 18:04:32 25 4
gpt4 key购买 nike

我正在尝试制作一个动态图表,当用户移动 slider 时,补丁会更新。我正在使用 anaconda python 附带的 matplotlib 和 pyqt 包。我运行的代码并正确绘制了一次,但是当我移动 slider 时更新失败。

我有以下内容

我的布局是使用以下类创建的

class plotArea(QtGui.QWidget):

def __init__(self):
super(plotArea, self).__init__()
self.init()

def init(self):
grid = QtGui.QGridLayout()
self.setLayout(grid)
title = QtGui.QLabel('Title')
sldTime = QtGui.QSlider(QtCore.Qt.Horizontal)
sldLevel = QtGui.QSlider(QtCore.Qt.Vertical)
plot = MyDynamicMplCanvas()
sldTime.valueChanged[int].connect(plot.changeValue)
sldLevel.valueChanged[int].connect(plot.changeValue)
grid.addWidget(title, 0, 0, 1, 10)
grid.addWidget(sldLevel, 1, 0, 10, 1)
grid.addWidget(sldTime, 11, 1, 1, 9)
grid.addWidget(plot, 1, 1, 9, 9)

我的图表类及其绘图和更新方法如下所示

class MyDynamicMplCanvas(FigureCanvas):

"""A canvas that updates itself every second with a new plot."""
def __init__(self):
fig = Figure()
FigureCanvas.__init__(self, fig)
chart = fig.add_subplot(111)
chart.set_xlim([0, 4])
chart.set_ylim([0, 4])
self.draw_lattice(chart)

def draw_lattice(self, chart):

min_val = 0
max_val = 100
my_cmap = cm.get_cmap('jet')
norm = matplotlib.colors.Normalize(min_val, max_val)
color_i = my_cmap(norm(np.random.uniform(0, 100)))
my_cmap = cm.get_cmap('jet')
square = Rectangle((1, 1), 1, 1, alpha=0.5, facecolor=color_i,
edgecolor='k')
chart.add_patch(square)

def changeValue(self,chart):
self.draw_lattice(chart)

由于这两种方法都在同一个类中,因此不应该有任何范围问题,并且代码在初始传递中确实有效,但如果我移动 slider ,则会出现以下错误。

  chart.add_patch(square)

属性错误:“int”对象没有属性“add_patch”

我一直在努力解决这个问题,我做错了什么?我需要删除次要情节吗?我不确定为什么从 changeValue 调用会导致代码失败。任何帮助深表感谢。

最佳答案

尽管您在 init 方法中定义了图表,但您实际上并没有保留对它的引用。要真正保留它,您需要转动线路

chart = fig.add_subplot(111)

self.chart = fig.add_subplot(111)

然后使用self.chart引用它。

您正在将一个整数传递到槽中,该整数将是生成信号时的 chart 参数,这就是您收到 int 错误的原因 - Chart 在代码中被视为 Axes 对象,但任何事件都会将整数放入该变量中。我会将插槽的输入更改为 slidervalue,并仅引用 self.chart 来更新您的绘图。

关于python - 无法根据 PYQT 小部件状态更改删除并重绘或绘制绘图轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com