2013-03-10 2 views
2

저는 Tkinter에 매우 익숙합니다. Tkinter에서이 "Hello World"와 같은 GUI 프로그램을 만들었습니다. 그러나 종료 버튼을 클릭 할 때마다 프로그램이 중단됩니다. 미리 감사드립니다!tkinter 종료 충돌

from Tkinter import * 
import sys 
class Application(Frame): 

def __init__(self,master=None): 

    Frame.__init__(self,master=None) 
    self.grid() 
    self.createWidgets() 

def createWidgets(self): 
    self.quitButton = Button(text='Quit',command=self.quit)#Problem here 
    self.quitButton.grid() 
app = Application() 
app.master.title("Sample application") 
app.mainloop() 
+0

들여 쓰기가 잘못되었습니다. 정확한 코드 샘플을 게시하려면 시간을 들여주세요. –

답변

4

Tkinter에서 루트 요소는 Tk 개체입니다.

from Tkinter import * 
import sys 

class Application(Tk): 
    def __init__(self): 
     Tk.__init__(self) 
     self.grid() 
     self.createWidgets() 
    def createWidgets(self): 
     self.quitButton = Button(text='Quit',command=self.destroy) # Use destroy instead of quit 
     self.quitButton.grid() 

app = Application() 
app.title("Sample application") 
app.mainloop() 
0

이 코드는 잘 지금 작동 :

import tkinter 

class MyApp(tkinter.LabelFrame): 
    def __init__(self, master=None): 
     super().__init__(master, text="Hallo") 
     self.pack(expand=1, fill="both") 
     self.createWidgets() 
     self.createBindings() 
    def createWidgets(self): 
     self.label = tkinter.Label(self) 
     self.label.pack() 
     self.label["text"] = "Bitte sende ein Event" 
     self.entry = tkinter.Entry(self) 
     self.entry.pack() 
     self.ok = tkinter.Button(self) 
     self.ok.pack() 
     self.ok["text"] = "Beenden" 
     self.ok["command"] = self.master.destroy 
    def createBindings(self): 
     self.entry.bind("Entenhausen", self.eventEntenhausen) 
     self.entry.bind("<ButtonPress-1>", self.eventMouseClick) 
     self.entry.bind("<MouseWheel>", self.eventMouseWheel) 
    def eventEntenhausen(self, event): 
     self.label["text"] = "Sie kennen das geheime Passwort!" 
    def eventMouseClick(self, event): 
     self.label["text"] = "Mausklick an Position " \ 
     "({},{})".format(event.x, event.y) 
    def eventMouseWheel(self, event): 
     if event.delta < 0: 
      self.label["text"] = "Bitte bewegen Sie das Mausrad"\ 
      " in die richtige Richtung." 
     else: 
      self.label["text"] = "Vielen Dank!" 

root = tkinter.Tk() 
app = MyApp(root) 
app.mainloop() 
0

당신이 self.quit()를 사용하는 파이썬 인터프리터가 닫힌 상태의 Tkinter 어플리케이션 bieng없이 폐쇄 할 ApplicationTk의 서브 클래스가 아닌 Frame해야한다. 따라서 .destroy() 명령을 시도한 후 .mainloop()을 사용하면 sys.quit()을 사용하십시오. 희망이 도움이됩니다.

1

귀하는 __init__을 사용하기가 어렵습니다. 이 작업을 수행 : 당신이 self.quit을 할 경우

from tkinter import * 
root = Tk() 

btn_quit = Button(root, text='Quit', command=quit()).pack() 
root.mainloop() 

, 즉 물건이 충돌 할 수 있도록 명령을 종료합니다! 희망이 도움이됩니다!

관련 문제