Я знаю, что в одном направлении есть много потоков, но я не смог найти решение. Многие потоки собираются закрыть графический интерфейс, но все еще работают с кодом python, и этого я не хочу. Но см. Мой вопрос ниже:Выход из tkinter gui без ошибок
В настоящее время я использую Python 2.7 и Windows 7. Я разрабатываю программу, которая анализирует мои данные, которые я читаю с датчика. После завершения моей программы python я замораживаю ее с помощью cx_freeze, чтобы выполнить ее на ПК без python или без matplotlib и т. Д. .... Проблема, с которой я столкнулась, заключается в том, что я хочу добавить кнопку закрытия, которая закрывает мое приложение. Проблема заключается в том, что я попробовал 3 различные возможности увидеть ниже:
import Tkinter
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
import globals
import data2plot
#from __builtin__ import file
globals.init()
def plot(x, aw,temperature,water):
#function to plot via matplotlib in the gui
#global file and if someone refresh before load data, default data is test.csv
file = "test"
#Version1
def close_window():
sys.exit()
#Version2
def close_window2():
root.quit()
#Version3
def close_window3():
root.destroy()
# GUI
root = Tkinter.Tk()
draw_button = Tkinter.Button(root, text="Quit", command = close_window)
draw_button.grid(row=1, column=2)
draw_button = Tkinter.Button(root, text="Quit2", command = close_window2)
draw_button.grid(row=1, column=3)
draw_button = Tkinter.Button(root, text="Quit3", command = close_window3)
draw_button.grid(row=1, column=4)
# init figure with the 3 different values and axes
fig = matplotlib.pyplot.figure()
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=0,column=1)
toolbar = NavigationToolbar2TkAgg(canvas, root)
toolbar.grid(row=1,column=1)
#starts loop for the figure
root.mainloop()
Я читал, что обычно следует использовать опцию root.quit(). Но единственной кнопкой, которая работает без ошибки, является третья кнопка с root.destroy(). Проблема в том, что если я использую третью кнопку, графический интерфейс закрывается, но программа все еще работает? У меня также есть выход из mainloop, но я думал, что я выхожу из mainloop с помощью root.quit()?
Другие 2 кнопки показывают сообщение об ошибке, и программа разбивается на Windows 7, но по крайней мере вся программа закрыта. Я также пробовал, как некоторые парни, предлагающие root.quit без скобок, но не работает вообще.
Сообщение об ошибке для двух кнопок:
Fatal Python error: PyEval_RestoreThread: NULL tstate
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
Теперь мой вопрос, как я могу убедиться, что я использовать GUI, сюжет некоторые вещи и так далее, и если я нажимаю кнопку бросить курить, графический интерфейс закрывается, и вся программа закрывается тоже?
Большое спасибо! Макс.
иногда это просто это просто :) ТНХ! – Max