Похоже, вам нужно следующее:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1, tight_layout=True)
plt.ion()
ax.plot([0,1,2],[0,3,2])
plt.show()
plt.pause(0.1)
input('Press enter to quit.')
plt.close()
В общем, программа на Python оценивается линейно. Это противоречит желанию иметь блокирующую командную строку (input
), но неблокирующий графический интерфейс.
То, что происходит в вышеупомянутом, - то, что GUI создан, но без какого-либо запущенного цикла обработки событий. Поэтому код может продолжать выполняться даже после отображения графического интерфейса. Недостатком этого является то, что без цикла обработки событий вы не можете взаимодействовать с графическим интерфейсом.
В случае, когда необходимо отобразить графическое окно и требуется какой-то пользовательский ввод, или после показа полностью интерактивного рисунка необходимо выполнить дополнительный код, такой код можно запустить в цикле событий GUI.
import matplotlib.pyplot as plt
def run_after(callback, pause=10, figure=None):
figure = figure or plt.gcf()
timer = figure.canvas.new_timer(interval=pause)
timer.single_shot = True
timer.add_callback(callback)
timer.start()
return timer
fig, ax = plt.subplots(1, 1, tight_layout=True)
ax.plot([0,1,2],[0,3,2])
# This function contains the code to be executed within the GUI event loop
def mycallback():
import tkinter
from tkinter import simpledialog
root = tkinter.Tk()
root.withdraw()
w = simpledialog.askinteger("Title", "How many numbers do you want to print")
for i in range(w):
print(i)
cb = run_after(mycallback)
plt.show()