2012-07-18 100 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