2012-07-18 103 views
1

我有一個Python程序來繪製使用自定義matplotlib小部件的簡單圖形。 我的代碼如下:更新一個PyQt小部件

import sys 
from GUI import * 
import random 
import matplotlib.pyplot as plt 

class GUIForm(QtGui.QDialog): 

    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self,parent) 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

     QtCore.QObject.connect(self.ui.pushButton, 
           QtCore.SIGNAL('clicked()'), self.PlotFunc) 

    def PlotFunc(self): 
     randValList = random.sample(range(0, 10), 10) 
     print(randValList) 
     self.ui.PlotWidget.canvas.ax.clear() 
     self.ui.PlotWidget.canvas.ax.plot(randValList) 

    def callFunc(self): 
     myapp.PlotFunc() 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp = GUIForm() 
    myapp.show() 
    sys.exit(app.exec_()) 

當我運行該程序,我可以看到GUI,但是當我點擊按鈕的情節不顯示線。空的情節是可見的。 然而如果我

def __init__(self, parent=None): 
      QtGui.QWidget.__init__(self,parent) 
      self.ui = Ui_Dialog() 
      self.ui.setupUi(self) 

      QtCore.QObject.connect(self.ui.pushButton, 
            QtCore.SIGNAL('clicked()'), self.PlotFunc) 
      self.ui.PlotWidget.canvas.ax.plot(randValList) 

if __name__ == "__main__": 
     app = QtGui.QApplication(sys.argv) 
     myapp = GUIForm() 
     myapp.show() 
     self.PlotFunc() 
     sys.exit(app.exec_()) 

程序繪製圖形。 所以我猜它與sys.exit(app.exec_())有關,但不知道如何解決這個問題。 任何幫助表示讚賞。

謝謝。

+0

請問您確認您的按鈕實例的名稱?在你的連接函數中你指定'self.ui.pushButton'。通常,Designer會默認使用'self.pushButton'創建它們。 – 2012-07-18 15:03:16

+0

@ dex19dt謝謝。它是self.ui,因爲按鈕是Ui_Dialog的一部分。 – madu 2012-07-18 15:35:29

+0

當您點擊按鈕時,您的打印語句是否顯示?你確認信號至少在發射嗎? – jdi 2012-07-19 03:59:12

回答

3

任何機會,如果你在PlotFunc的最後添加這行代碼,它會起作用嗎?

self.ui.PlotWidget.canvas.draw() 
+0

非常感謝!它確實有效。我不知道每次畫畫時都需要在畫布上調用draw()。我認爲app_exec()運行一個循環,檢測每個輸入,然後自動繪製。謝謝! – madu 2012-07-22 15:09:21

+0

我發現窗口有一個'repaint()'方法,沒有參數。謝謝你們。 – ArekBulski 2017-01-26 13:03:30