포럼에 최근에 @Clueless_captain의 질문이 게시되었습니다. 그것은 @furas에 의해 응답되었습니다. 나는 그 대화에서 언급 할 수 없기 때문에 stackoverflow를 처음 사용한다. 이 대화의 URL은 (Tkinter Entry widget stays empty in larger programs (Python 2))입니다. furas가 게시 한 코드는 정확하게 내가하려고하는 것이 아니지만 자신이 할 수없는 유일한 것은 EntryWidget에 제공된 입력을 다시 사용할 수있는 방법을 찾는 것입니다. 나는 furas에 의해 작성된 코드를 수정했습니다. 내 목표는 GUI가 종료되기 전에 입력이 인쇄된다는 것입니다. 이를 위해 Return 키를 새로운 Function으로 바인딩했습니다.이 Function은이 새로운 Function에서 Textstring을 가져와 더 처리해야합니다. 두 번째 이름을 얻기 위해 버튼을 클릭 할 때만 수행됩니다. 본 윤리 강령의 명령이 해제 되었습니까? 문제가 10 번 줄에있는 문자열 'e.bind
'과 밀접한 관련이 있다고 생각하지만 문제를 찾을 수 없습니다.TKinter : TopLevel()의 Entry-Widget에서 입력 재사용
최고 감사합니다, G_Lehmann
---------- 수정 된 코드 :
from Tkinter import *
def get_input(text, variable):
win = Toplevel()
win.title("Get value")
f = LabelFrame(win, text=text)
f.pack()
e = Entry(win, textvariable=variable)
e.bind("<Return>", do_more(text, variable, e))
e.pack(side="right")
#I tried e.bind here, but This had no Effect.
b = Button(win, text = "Cancel", command=win.destroy)
b.pack()
#do_more is the new Function I want to use to process the Variable 'data' further.
def do_more(text, variable, e):
data = e.get()
print data
print len(data)
print type(data)
def get_value(text, variable):
get_input(text, variable)
# --- main --
root = Tk()
root.title("Ask-name-SUB")
# global variables
var_name = StringVar()
var_address = StringVar()
b = Button(root, text="Enter your name", command=lambda: get_value("Your name:", var_name))
b.pack()
b = Button(root, text="Enter your address", command=lambda: get_value("Your address:", var_address))
b.pack()
b = Button(root, text="Cancel", command=root.destroy)
b.pack()
root.mainloop()
# --- after -- (My Edit: I disabled this as I want to bind the Variables before my GUI gets terminated)
"""
name = var_name.get()
print "Print name, its length, its type"
print name, len(name), type(name)
address = var_address.get()
print "Print address, its length, its type"
print address, len(address), type(address)
"""
귀하의 질문에 약간의 불확실성이 있습니다. 당신이 해결하려고하는 진짜 문제는 무엇입니까? 사용자에게 문자열을 입력하도록 요청하는 기능을 호출 할 수 있어야하며 해당 기능을 구성 가능하게하려고합니다 (예 : "성명"또는 "주소")? 또한, 정보를 출력하는 것이 진정한 목표입니까, 아니면 단지 설명을 목적으로'mainloop '이후의 인쇄문입니까? 대부분의 GUI는'mainloop '뒤에 어떤 코드도 없어야합니다. –
'bind' ('command ='와 유사)는 함수 이름을 필요로합니다 - 그것은'()'와 인자가 없다는 것을 의미합니다. 'lambda'를 사용하여 함수를 'e.bind ("", lambda : do_more (text, variable, e))' –
furas
에 할당 할 수 있습니다. BTW : 두 번째 버튼을 만들 수 있습니다. ''OK ''-이 버튼에 기능을 지정하고 창을 닫기 전에 뭔가를하십시오. – furas