Я написал скрипт python3.x для построения графика из matplotlib, а tkinter используется для диалогового окна, чтобы ввести заголовок, а затем просмотреть файлы данных, которые будут использоваться.после многих испытаний все работает, как я хочу, за исключением того, что после закрытия окна графика программа все еще работает.Я должен закрыть окно терминала или сбросить ядро в Ipython / Jupyter.Есть ли простой способ завершить программу, когда pyplot закрыт?
Обратите внимание, я действительно новичок в программировании, и многое из этого собрано воедино из уроков и других вопросов форума.Я думаю, что одна из возможных проблем - это то, как я работаю бэкендом (matplotlib говорит, что использование () не является предпочтительным способом сделать это), и, возможно, можно найти решение, настроив цикл, чтобы спросить, хочу ли я сделать другойсюжет.Еще одна возможность - поместить график в окно tkinter, но, честно говоря, я сегодня научил себя tkinter как открыть браузер для выбора файлов данных.
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
import numpy as np
import tkinter
from tkinter import Tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename
plot_title = "" #placeholder variable
wavelength = "" #placeholder variable
def get_plot_title():
global plot_title
plot_title = title_entry.get()
title_entry.delete(0, tkinter.END)
return plot_title
def get_wavelength():
global wavelength
wavelength = wavelength_entry.get()
wavelength_entry.delete(0, tkinter.END)
return wavelength
root = Tk()
root.geometry('400x400')
rows = 0
while rows < 10:
root.rowconfigure(rows, weight=1)
root.columnconfigure(rows,weight=1)
rows += 1
title_label = ttk.Label(root, text="Enter TeX style name for plot title.\n (e.g., SrTiO3 would be SrTiO_{3})")
title_label.grid(row=1, column=4)
title_entry = ttk.Entry(root)
title_entry.grid(row=2, column=4)
title_entry.insert(0, 'Enter plot title here')
title_button = ttk.Button(root)
title_button.configure(text='Enter Plot Title', command=get_plot_title)
title_button.grid(row=3, column=4)
title_label = ttk.Label(root, text="Enter diffraction wavelength in Angstroms")
title_label.grid(row=5, column=4)
wavelength_entry = ttk.Entry(root)
wavelength_entry.grid(row=6, column=4)
wavelength_entry.insert(0, 'Enter wavelength here')
wavelength_button = ttk.Button(root)
wavelength_button.configure(text='Enter Wavelength', command=get_wavelength)
wavelength_button.grid(row=7, column=4)
root.mainloop()
##############
Tk().withdraw()
obs_file = askopenfilename(title = "Select the Observed data file.")
calc_file = askopenfilename(title = "Select the Calcualted data file.")
diff_file = askopenfilename(title = "Select the Difference data file.")
hkl_file = askopenfilename(title = "Select the hkl data file.")
obs_x, obs_y = np.loadtxt(obs_file, unpack=True)
plt.plot(obs_x, obs_y, 'k.', label='Observed', markersize = 3)
plt.yticks([])
calc_x, calc_y = np.loadtxt(calc_file, unpack=True)
plt.plot(calc_x, calc_y, 'r', label='Calculated')
diff_x, diff_y = np.loadtxt(diff_file, unpack=True)
diff_offset = 100
plt.plot(diff_x, diff_y - diff_offset, color='grey', label='Difference')
rslt_h, rslt_k, rslt_l, rslt_m, rslt_d, rslt_Th2, rslt_lp = np.loadtxt(hkl_file, unpack=True)
rslt_Th2_offset = np.full((len(rslt_Th2), 1), (min(diff_y)-150))
plt.plot(rslt_Th2, rslt_Th2_offset, 'k|', label='hkl')
plt.axis([min(obs_x), max(obs_x), None, None])
plot_title = "$" + str(plot_title) + "$"
plt.text(((max(obs_x)-min(obs_x))/2 ), max(obs_y), plot_title, fontsize=12)
x_axis_label = r'$2\theta (\degree), \lambda = $' + wavelength + ' $\AA $'
plt.xlabel(x_axis_label)
plt.ylabel('Intensity (arb. uints)')
plt.legend()
plt.show()