2017-10-29 6 views
0

사용자가 2 점의 위치를 ​​입력 할 수 있도록 tkinter 창을 여는 함수를 만들려고합니다. Matlab의 inputdlg 함수와 유사합니다.파이썬에서 tkinter를 사용하는 입력 대화 상자

"GUI"에는 클릭시 "입력란"이 닫히고 점을 가져 오는 버튼이 있습니다.

지금까지 창을 만들 수 있었지만 포인트를 검색 할 수 없습니다. 대신을 입력하면 인쇄을 선택하면 실행됩니다.

코드에 어떤 문제가 있는지 알려주실 수 있습니까? 댓글에서 지적

import tkinter as tk 

root=tk.Tk() # this will create the window 

def get_value(event): 

    fpoint=int(entry1.get()) # Gets point 1 
    lpoint=int(entry2.get()) # Gets point 2 
    points=[fpoint,lpoint] 
    root.destroy()   # destroys Gui 
    return(points)   # Gets the points 

box1=tk.Label(root, text="First point") # Label of box 1 
entry1=tk.Entry(root)     # Box 1 

box2=tk.Label(root, text="Last point") # Label of box 2 
entry2=tk.Entry(root)     # box 2 

Done_button=tk.Button(root, name="done") #Button to terminate the "gui" 
Done_button.bind("<Button-1>",get_value) # Run function "get_value" on click  
box1.grid(row=1, sticky="W",padx=4)    # position of label for box1 
entry1.grid(row=1,column=1,sticky="E", pady=4) # position of box 1 
box2.grid(row=2, sticky="W",padx=4)    # position of label for box2 
entry2.grid(row=2,column=1,sticky="E", pady=4) # position of box2 
Done_button.grid(row=3,column=1)    # position of "button 

root.mainloop() 
+1

이벤트 처리기를 반환 할 수 없습니다. 그들이 어디로 돌아 가야합니까? 대신 상태를 수정해야합니다. 글로벌이 아닌 베스트. 또한 버튼에 명령 인수를 사용할 수있는 bind를 불필요하게 사용합니다. – deets

답변

0

deets, 당신은 부모의 또는 기능의 글로벌 변수의 값 대신 수정해야합니다.

이벤트 처리기를 사용하는 것은 불필요하며 Done_button.bind("<Button-1>",get_value)에도 제한이 있습니다. 왼쪽 마우스 버튼으로 클릭 할 때만 작동하기 때문입니다. 예를 들어 버튼에 포커스가있을 때 공백을 누르면 유효한 버튼을 눌렀음에도 아무런 반응이 없습니다. 대신 command 옵션을 tk.Button으로 사용하여 버튼을 누를 때마다 함수를 호출 할 수 있습니다.

난 당신의 코드를 편집의 라인을 추가했습니다 : 부모의 값을 수정하기위한

####### MODIFY A VARIABLE IN PARENT ####### 
    root.geometry(entry1.get() + "x" + entry2.get()) 

, 그리고 : 다음

####### Configuring the button to call a function when pressed ####### 
Done_button.configure(command=get_value) 

만들어 제안 변경 전 코드 :

import tkinter as tk 

root=tk.Tk() # this will create the window 

def get_value(): 

    fpoint=int(entry1.get()) # Gets point 1 
    lpoint=int(entry2.get()) # Gets point 2 
    points=[fpoint,lpoint] 

    ####### MODIFY A VARIABLE IN PARENT ####### 
    root.geometry(entry1.get() + "x" + entry2.get()) 

box1=tk.Label(root, text="First point") # Label of box 1 
entry1=tk.Entry(root)     # Box 1 

box2=tk.Label(root, text="Last point") # Label of box 2 
entry2=tk.Entry(root)     # box 2 

Done_button=tk.Button(root, name="done") #Button to terminate the "gui" 

####### Configuring the button to call a function when pressed ####### 
Done_button.configure(command=get_value) 
#Done_button.bind("<Button-1>",get_value) # Run function "get_value" on click 
box1.grid(row=1, sticky="W",padx=4)    # position of label for box1 
entry1.grid(row=1,column=1,sticky="E", pady=4) # position of box 1 
box2.grid(row=2, sticky="W",padx=4)    # position of label for box2 
entry2.grid(row=2,column=1,sticky="E", pady=4) # position of box2 
Done_button.grid(row=3,column=1)    # position of "button 



root.mainloop()