我正在尝试创建一个打开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()
答案 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()