我想將我的QMainWindow
中的QPushButton
與我使用Matplotlib創建的類連接,以便在按下按鈕時顯示網格。這是代碼的一部分:使用按鈕在不同類之間的matplotlib圖中添加網格
class Ventana(QMainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
self.channel = ViewWidget()
#I add a toolbar and i put the button in here
self.toolbar2.addWidget(self.btn_showgrid)
self.btn_showgrid.setEnabled(True)
self.connect(self.btn_showgrid, SIGNAL("clicked()"), self.showGrid)
def showGrid(self):
self.btn_showgrid.setEnabled(False)
self.channel.axes.grid(True)
class ViewWidget(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.mainWidget = QWidget()
self.setCentralWidget(self.mainWidget)
layout = QVBoxLayout()
self.mainWidget.setLayout(layout)
self.figure_canvas = FigureCanvas(Figure())
layout.addWidget(self.figure_canvas, 10)
self.axes = self.figure_canvas.figure.add_subplot(111)
x = np.arange(0,5,0.1)
y = np.sin(x)
self.axes.plot(x,y)
我的方法稱爲showGrid
按鈕設置爲「禁用」(就是我要當按鈕被推向),但它不顯示網格。我究竟做錯了什麼?
希望你能幫助我。謝謝你的回答
-------------------------編輯---------------- ----------------
我做了一些改動。我創建了QPushButton
,並將其添加到圖的工具欄中。
# create a simple widget to extend the navigation toolbar
self.btn_showgrid = QPushButton("Show Grid")
self.btn_showgrid.setEnabled(True)
self.btn_hidegrid = QPushButton("Hide Grid")
self.btn_hidegrid.setEnabled(False)
layout = QVBoxLayout()
self.mainWidget.setLayout(layout)
self.figure_canvas = FigureCanvas(Figure())
layout.addWidget(self.figure_canvas, 10)
self.axes = self.figure_canvas.figure.add_subplot(111)
self.axes.grid(False)
x = np.arange(0,5,0.1)
y = np.sin(x)
self.axes.plot(x,y)
我也放了一行:self.axes.grid(False)
,你可以在上面看到。而在最後我創造了這個方法:
def showGrid(self):
self.btn_showgrid.setEnabled(False)
self.btn_hidegrid.setEnabled(True)
self.axes.grid(True)
self.axes.draw()
現在的問題是,當我按下按鈕,隱藏的僅僅是像它應該,但網格確實沒有任何顯示。但是,如果在同一個`QMainWindow中創建一個新的情節,它的工作原理!
我想我需要刷新陰謀,此刻我使self.axes.grid(True)
,但draw()
不起作用。我怎樣才能做到這一點?我的意思是,刷新情節?
您是否需要設置您的FigureCanvas的父級? 'self.figure_canvas.setParent(self.mainWidget)' – Suever
我試過了,但沒有顯示任何改變。 –
謝謝你的回答@Suever :) –