2016-10-12 70 views
0

我正在寫一個程序,當我點擊某些按鈕時應該給我一個圖表數據。 所以這是程序,只要我現在,我仍然必須連接最後4個按鈕,但第一個工作,但現在有另一個問題:我曾經有一個圖表顯示,因爲我點擊「一個情節「但是由於我激活了」第一個按鈕「,由於標題中提到的問題,圖表不再出現。這是腳本:python changefig()只需要2個參數(1給出)

class Main(QMainWindow, Ui_MainWindow): 
def __init__(self, parent=None): 
    super(Main, self).__init__(parent) 
    self.setupUi(self) 
    self.fig_dict = {} 

    self.mplfigs.itemClicked.connect(self.changefig) 


    self.button1.setText("First Point") 
    self.button1.clicked.connect(self.onClickButton1) 

    self.dialogbutton1 = PopUp(self) 

    fig = Figure() 
    self.addmpl(fig) 
@QtCore.pyqtSlot() 
def changefig(self, item): 
    text = item.text() 
    self.rmmpl() 
    self.addmpl(self.fig_dict[str(text)]) 

def addfig(self, name, fig): 
    self.fig_dict[name] = fig 
    self.mplfigs.addItem(name) 

def addmpl(self, fig): 
    self.canvas = FigureCanvas(fig) 
    self.mplvl.addWidget(self.canvas) 
    self.canvas.draw() 

    self.toolbar = NavigationToolbar(self.canvas, 
      self.mplwindow, coordinates=True) 
    self.mplvl.addWidget(self.toolbar) 

def onClickButton1(self): 
    """ When button 1 is clicked I do the following """ 
    print "does nothing now." 

    self.dialogbutton1.exec_() 

def rmmpl(self,): 
    self.mplvl.removeWidget(self.canvas) 
    self.canvas.close() 
    self.mplvl.removeWidget(self.toolbar) 
    self.toolbar.close() 

類彈出(QtGui.QDialog): DEF 初始化(自我,父母=無): 超(彈出,個體經營)。 初始化(父)

self.buttonBox = QtGui.QDialogButtonBox(self) 
    self.buttonBox.setOrientation(QtCore.Qt.Horizontal) 
    self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) 

    self.textBrowser = QtGui.QTextBrowser(self) 
    self.textBrowser.append("x - Coordinate = 0                   y - Coordinate = 0.031451") 

    self.verticalLayout = QtGui.QVBoxLayout(self) 
    self.verticalLayout.addWidget(self.textBrowser) 
    self.verticalLayout.addWidget(self.buttonBox) 

如果 == '主要': 進口SYS 從PyQt4的進口QtGui 進口numpy的爲NP

fig1 = Figure() 
ax1f1 = fig1.add_subplot(111) 
ax1f1.plot(np.random.rand(5)) 


app = QtGui.QApplication(sys.argv) 
main = Main() 
main.addfig('One plot', fig1) 

print main.fig_dict 
main.show() 
sys.exit(app.exec_()) 

回答

0

class Main,你是呼叫changefig功能爲self.mplfigs.itemClicked.connect(self.changefig)

但是函數定義changefigdef changefig(self, item):,它需要兩個參數 - selfitem

當您調用changefig - self.mplfigs.itemClicked.connect(self.changefig)時,只傳遞自我。但項目不通過。

這就是爲什麼你會得到這個錯誤。

應該self.mplfigs.itemClicked.connect(self.changefig(item))

+0

但現在寫的,當我運行它: –

+0

好了,但現在當我運行它有寫: 文件「C:\用戶\ hanlab \桌面\昆汀\情節MIT按鈕\ plot.py「,第19行,在__init__ self.mplfigs.itemClicked.connect(self.changefig(item)) NameError:全局名稱'項目'未定義 –

+0

對於上面的評論感到抱歉,我不小心按下輸入 –

相關問題