동일한 방향으로 많은 스레드 제목이 있음을 알고 있지만 해결책을 찾지 못했습니다. 많은 스레드가 GUI를 닫으려고하지만 여전히 파이썬 코드를 실행하려고합니다. 그게 내가 원하지 않는 것입니다. 하지만 아래 질문을 참조하십시오 :오류없이 tkinter GUI 종료
저는 현재 Python 2.7 및 Windows 7을 사용하고 있습니다. 나는 센서에서 읽은 데이터를 분석하는 프로그램을 개발 중입니다. 파이썬 프로그램을 끝내고 나면 파이썬없이 또는 matplotlib없이 PC에서 실행하기 위해 cx_freeze를 동결시킨다. 내가 가지고있는 문제는 내 응용 프로그램을 닫는 종료 버튼을 추가하고 싶다는 것입니다.
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() 옵션을 사용해야합니다 읽었습니다 : 문제는 내가 3 가지 가능성은 아래 참조하려한다는 것입니다. 하지만 오류없이 작동하는 유일한 버튼은 root.destroy()가있는 세 번째 버튼입니다. 문제는 세 번째 버튼을 사용하면 GUI가 닫히지 만 프로그램이 계속 실행되고있는 것입니까? 메인 루프를 종료 했는데도 rootloop()으로 메인 루프를 종료 했습니까?
다른 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, 음모 몇 가지를 사용하고 있는지 확인 할 수있는 방법이며, 내가 종료 버튼을 누를 경우 GUI 닫히고 전체 프로그램도 닫힙니다.
감사합니다. 최대
때때로이 코드는 간단합니다. thx! – Max