Python 2.7 Python可执行文件与plt.show()挂起

Python 2.7 Python可执行文件与plt.show()挂起,python-2.7,matplotlib,pyqt4,pyinstaller,Python 2.7,Matplotlib,Pyqt4,Pyinstaller,我正在Win10平台上用Python2.7创建一个GUI应用程序(EXE) 应用程序应该使用用户提供的参数绘制图形(使用matplotlib)。当用户更改值并再次按下绘图按钮时,应在保留先前曲线的同一图形上绘制新图形,以便于比较(这也是一项要求) 在运行程序的exe文件时,我必须在脚本末尾使用plt.show()来显示图形 问题:第二次按下绘图按钮时,应用程序冻结并崩溃。这是第一次,一切都很顺利,并显示了图表 尝试的解决方案: 通过这么多线程,我尝试了以下解决方案,但运气不佳: 使用plt.dr

我正在Win10平台上用Python2.7创建一个GUI应用程序(EXE)

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

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

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

尝试的解决方案: 通过这么多线程,我尝试了以下解决方案,但运气不佳:

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

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

  • 还使用了ion()/ioff()

  • 尝试plt.show(block=False),应用程序在第二次单击绘图按钮时崩溃

  • 我遇到了可以与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_())
    

    如果没有答案,很难理解发生了什么。首先,从shell/prompt运行脚本时是否也会出现问题?然后,混合框架很少是一个好主意,因为它经常导致意外的行为(这可能是问题的原因),所以您可以使用Qt或tk,而不是两者都使用。最后,不鼓励编辑使用pyuic生成的文件,因为这通常会导致对象结构混乱,并在尝试更新现有UI时产生问题。感谢您的回复。我尝试了这些解决方案,但一个错误导致了另一个错误,一切都搞砸了(我不熟悉使用python创建应用程序)。最后用PYQTGRAPH代替matplotlib解决了这个问题。如果没有。首先,从shell/prompt运行脚本时是否也会出现问题?然后,混合框架很少是一个好主意,因为它经常导致意外的行为(这可能是问题的原因),所以您可以使用Qt或tk,而不是两者都使用。最后,不鼓励编辑使用pyuic生成的文件,因为这通常会导致对象结构混乱,并在尝试更新现有UI时产生问题。感谢您的回复。我尝试了这些解决方案,但一个错误导致了另一个错误,一切都搞砸了(我不熟悉使用python创建应用程序)。最后用PYQTGRAPH代替matplotlib解决了这个问题。