我正在嘗試製作一個動態圖表,其中在用戶移動滑塊時更新修補程序。我正在使用隨anaconda python一起提供的matplotlib和pyqt包。我已經運行的代碼並正確執行了繪圖,但是當我移動滑塊時更新失敗。無法刪除並重繪或繪製基於PYQT小部件狀態更改的繪圖軸
我有以下
我的佈局與下面的類創建
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)
由於這兩種方法都在同一個類中,不應該有任何範圍問題,並且代碼在初始傳遞時工作,但如果我移動滑塊,則會出現以下錯誤。
chart.add_patch(square)
AttributeError的:「詮釋」對象有沒有屬性「add_patch」
我一直在努力與這個了一點什麼我做錯了什麼?我需要刪除該子圖嗎?我不知道爲什麼從changeValue調用導致代碼失敗。任何幫助深表感謝。
感謝您的迴應,我需要使用格式self.variable_name所有實例? – TheCodeNovice 2014-11-24 17:43:42
對於任何你需要保留引用的東西,是的 - 它成爲了你可以在所有方法中從self訪問的類的一個屬性 - self總是第一個參數。 – Ajean 2014-11-24 17:48:52