Python可执行文件因plt.show挂起

问题描述

我正在Win 10平台上的Python 2.7中创建一个GUI应用程序(EXE)。

该应用程序应该使用用户提供的参数绘制图形(使用matplotlib)。当用户更改值并再次按下绘图按钮时,应在同一图形上绘制新图形,并保留以前的曲线,以便于比较(也是一项要求)。

运行程序的exe文件时,我必须在脚本末尾使用plt.show()来显示图形。

问题:第二次按下绘图按钮时,应用程序冻结并崩溃。第一次,一切顺利,并显示了图形。

尝试的解决方案: 经过如此多的线程,我尝试了以下运气不佳的解决方案:

  1. 使用了plt.draw()而不是plt.show(),因为后者会阻止程序执行。但是draw()不会显示图形。

  2. 尝试了plt.pause(),应用程序出现运行时错误并崩溃。

  3. 还玩过ion()/ ioff()。

  4. 尝试了plt.show(block = False),第二次单击“绘图”按钮时应用程序崩溃。

  5. 我遇到了可以与matplotlib一起使用的各种后端,并怀疑plt.show()可能与其他后端配合良好。尝试过TkAgg,WxAgg等,但没有运气。

如果有人可以帮助我...我已经尝试了3天,我将非常感谢!

代码示例:

from PyQt4 import QtCore,QtGui
import numpy as np
import matplotlib
matplotlib.use('TkAgg')        #Trying different backends
import matplotlib.pyplot as plt
plt.rc('xtick',labelsize = 16)
plt.rc('ytick',labelsize = 16)
import FileDialog     #These three imports needed for EXE
import tkFileDialog
import tkMessageBox

class Ui_MainWindow(object):
    def setupUi(self,MainWindow):
#UI elements code...

    def retranslateUi(self,MainWindow):
#Other code lines
    def my_Plot_Function():
         #Some calculations
         plt.figure('My title')
         plt.plot(x,y,label = 'My Label')
         plt.grid(True)
         plt.axhline(y = 0,color = 'k')
         plt.xlabel(' X ',fontsize = 16)
         plt.ylabel(' Y ',fontsize = 16)
         plt.legend(prop={'size': 14})            
                
         plt.show()

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)