问题描述
我正在Win 10平台上的Python 2.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_())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)