使用tkinter在python上输入对话框

时间:2017-10-29 12:19:32

标签: python tkinter user-input

我正在尝试创建一个打开tkinter窗口的函数,以便用户可以键入2个点的位置。与Matlab的 inputdlg 函数类似。

“GUI”有一个按钮,在点击时关闭“输入框”并获得积分。

到目前为止,我能够创建窗口,但我无法检索点。 如果不是 return ,我选择打印值,这将运行。

有人能告诉我代码有什么问题吗?

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 个答案:

答案 0 :(得分: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()