[PYTHON] 프로그램을 실행하면 Tkinter 버튼 명령이 활성화됩니까?
PYTHON프로그램을 실행하면 Tkinter 버튼 명령이 활성화됩니까?
나는 검색 양식을 만들려고 노력 중이며 버튼에 문제가있는 것 같다. 나는 Python / tkinter GUI 프로그래밍 (및 GUI 프로그래밍 전반)의 초보자이며 Hello World 앱의 골격을 빌렸다. 그리고 그걸 정리해 놨어.
아래 코드에서 내 Browse 버튼의 "command"옵션을 클릭하면 클래스의 내부 get_dir () 함수를 호출 할 수 있습니다. 그러나 응용 프로그램을 실행하려고하면 get_dir () 함수가 호출되고 디렉토리를 선택하라는 메시지가 나타납니다. 어떤 일이 벌어지는 지, 그리고 내가 올바르게 행동하게하기 위해 무엇을 할 수 있습니까?
from Tkinter import *
import tkFont
from tkFileDialog import askdirectory
class App:
def __init__(self, master):
fontHead = tkFont.Font(family="Arial", size=10, weight=tkFont.BOLD)
fontBold = tkFont.Font(family="Arial", size=8, weight=tkFont.BOLD)
fontReg = tkFont.Font(family="Arial", size=8)
frameN = Frame(master)
frameN.grid(row=0,padx=5,pady=5)
frameXBH = Frame(frameN)
frameXBH.grid(row=0,columnspan=5,padx=5)
Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=20,background="#cccccc").grid(row=0)
Label(frameXBH, text="Xbox 360",font=fontBold,width=9).grid(row=0,column=1)
Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=440,background="#cccccc").grid(row=0,column=2,sticky="WE")
Label(frameN, text="Destination Path:",font=fontReg).grid(row=1,sticky="W")
xbPath = Entry(frameN,width=30,font=fontReg)
xbPath.grid(row=1,column=1,sticky="W")
xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath))
xbBrowse.grid(row=1,column=2,sticky="W")
xbRel = Checkbutton(frameN,text="Release",font=fontReg)
xbRel.grid(row=1,column=3,sticky="W")
xbShip = Checkbutton(frameN,text="Ship",font=fontReg)
xbShip.grid(row=1,column=4,sticky="W")
Canvas(frameN,borderwidth=1,relief="groove",width=550,height=0).grid(row=2,columnspan=5,pady=10)
# SAVE AND CANCEL
btnSave = Button(frameN,text="Save",width=10)
btnSave.grid(row=3,column=3,sticky="E")
btnCancel = Button(frameN,text="Cancel",width=10)
btnCancel.grid(row=3,column=4,sticky="W")
def get_dir(self,box):
tmp = askdirectory(mustexist=1,title="Please select a destination")
tmp = tmp.replace("/","\\")
box.delete(0,END)
box.insert(0,tmp)
root = Tk()
root.resizable(0,0)
app = App(root)
root.mainloop()
해결법
-
==============================
1.이벤트 처리기를 원하는 인수로 get_dir ()을 호출하는 람다 함수로 만듭니다.
이벤트 처리기를 원하는 인수로 get_dir ()을 호출하는 람다 함수로 만듭니다.
xbBrowse = Button(frameN, text="Browse...", font=fontReg, command=lambda : self.get_dir(xbPath))
-
==============================
2.위의 코드에서 :
위의 코드에서 :
xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath))
함수를 이미 호출하고 있다면 함수를 전달해야합니다.
xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir)
-
==============================
3.get_dir 메소드에 대한 참조를 전달해야합니다.
get_dir 메소드에 대한 참조를 전달해야합니다.
변화
xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath))
에
xbBrowse = Button(frameN,text="Browse...",font=fontReg, command=self.get_dir)
그런 다음 항목 위젯을 인스턴스 변수로 만들어 get_dir 메소드에서 액세스 할 수있게하십시오.
e.
self.xbPath = Entry(frameN,width=30,font=fontReg)
그런 다음 get_dir () 메소드는 다음과 같습니다.
def get_dir(self): tmp = askdirectory(mustexist=1,title="Please select a destination") tmp = tmp.replace("/","\\") self.xbPath.delete(0,END) self.xbPath.insert(0,tmp)
from https://stackoverflow.com/questions/3704568/tkinter-button-command-activates-upon-running-program by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 심하게 중첩 된 JSON에서 팬더 데이터 프레임 만들기 (0) | 2018.11.24 |
---|---|
[PYTHON] Python : Excel 2007+ 파일 (.xlsx 파일)에 쓰기 (0) | 2018.11.24 |
[PYTHON] 부스트 파이썬 안녕 프로그램에서 가져 오기 오류 (0) | 2018.11.24 |
[PYTHON] 인코딩은 "ascii"코덱이 문자를 인코딩 할 수 없음을 나타냅니다. 서수는 범위에 없습니다 (128) " (0) | 2018.11.24 |
[PYTHON] 디렉토리의 파일 이름을 오름차순으로 정렬 [duplicate] (0) | 2018.11.24 |