Binding Tkinter绑定和.get()问题
我正在尝试将ENTER键绑定到电子邮件密码输入框。这样,当我输入了所有三项后,我可以按enter键调用Binding Tkinter绑定和.get()问题,binding,tkinter,Binding,Tkinter,我正在尝试将ENTER键绑定到电子邮件密码输入框。这样,当我输入了所有三项后,我可以按enter键调用callback()函数。我遇到的另一个问题是.get()方法。它似乎没有将我在输入框中输入的值分配给我在代码中定义的变量 from Tkinter import * root = Tk() # grabs the values in the entry boxes and assigns them to variablse def callback(): steamUser = s
callback()
函数。我遇到的另一个问题是.get()
方法。它似乎没有将我在输入框中输入的值分配给我在代码中定义的变量
from Tkinter import *
root = Tk()
# grabs the values in the entry boxes and assigns them to variablse
def callback():
steamUser = steamUserW.get()
steamPass = steamPassW.get()
emailPass = emailPassW.get()
root.destroy()
# labels for each entry
Label(root, text="Steam Username").grid(row=0)
Label(root, text="Steam Password").grid(row=1)
Label(root, text="Email Password").grid(row=2)
# entry and button widgets
steamUserW = Entry(root)
steamPassW = Entry(root, show="*")
emailPassW = Entry(root, show="*")
submit = Button(root, text="Submit", command=callback)
# bind the ENTER key to callback function
emailPassW.bind("<Return>", callback)
# space out the widgets
steamUserW.grid(row=0, column=1)
steamPassW.grid(row=1, column=1)
emailPassW.grid(row=2, column=1)
submit.grid(row=3, column=1)
root.mainloop()
print steamUser
从Tkinter导入*
root=Tk()
#获取输入框中的值并将其分配给variablse
def callback():
streamuser=streamuserw.get()
steamPass=steamPassW.get()
emailPass=emailPassW.get()
root.destroy()
#每个条目的标签
标签(root,text=“Steam Username”).grid(行=0)
标签(root,text=“Steam Password”).grid(行=1)
标签(root,text=“电子邮件密码”).grid(行=2)
#条目和按钮小部件
streamuserw=条目(根)
streampassw=条目(根,show=“*”)
emailPassW=条目(根,show=“*”)
提交=按钮(根,text=“提交”,命令=回调)
#将ENTER键绑定到回调函数
emailPassW.bind(“,回调)
#将小部件隔开
streamuserw.grid(行=0,列=1)
streampassw.grid(行=1,列=1)
emailPassW.grid(行=2,列=1)
submit.grid(行=3,列=1)
root.mainloop()
打印蒸汽用户
EDIT,我的新代码修复了.get()问题,但我的ENTER键仍然存在绑定问题
from Tkinter import *
class gui:
def __init__(self, master):
self.master = master
# labels for each entry
Label(self.master, text="Steam Username").grid(row=0)
Label(self.master, text="Steam Password").grid(row=1)
Label(self.master, text="Email Password").grid(row=2)
# button widget
self.steamUserW = Entry(self.master)
self.steamPassW = Entry(self.master, show="*")
self.emailPassW = Entry(self.master, show="*")
self.submit = Button(self.master, text="Submit", command=self.assign)
# bind the ENTER key to callback function
self.emailPassW.bind("<Return>", self.assign)
self.emailPassW.bind("<KP_Enter>", self.assign)
# space out the widgets
self.steamUserW.grid(row=0, column=1)
self.steamPassW.grid(row=1, column=1)
self.emailPassW.grid(row=2, column=1)
self.submit.grid(row=3, column=1)
# grabs the values in the entry boxes and assigns them to variablse
def assign(self):
self.steamUser = self.steamUserW.get()
self.steamPass = self.steamPassW.get()
self.emailPass = self.emailPassW.get()
self.close()
# closes GUI window
def close(self):
self.master.destroy()
root = Tk()
userGui = gui(root)
root.mainloop()
print userGui.steamUser
从Tkinter导入*
类gui:
定义初始(自我,主):
self.master=master
#每个条目的标签
标签(self.master,text=“Steam Username”).grid(行=0)
标签(self.master,text=“Steam Password”).grid(行=1)
标签(self.master,text=“电子邮件密码”).grid(行=2)
#按钮小部件
self.streamuserw=条目(self.master)
self.steamPassW=条目(self.master,show=“*”)
self.emailPassW=条目(self.master,show=“*”)
self.submit=按钮(self.master,text=“submit”,command=self.assign)
#将ENTER键绑定到回调函数
self.emailPassW.bind(“,self.assign)
self.emailPassW.bind(“,self.assign)
#将小部件隔开
self.streamuserw.grid(行=0,列=1)
self.steamPassW.grid(行=1,列=1)
self.emailPassW.grid(行=2,列=1)
self.submit.grid(行=3,列=1)
#获取输入框中的值并将其分配给variablse
def分配(自我):
self.streamuser=self.streamuserw.get()
self.steamPass=self.steamPassW.get()
self.emailPass=self.emailPassW.get()
self.close()
#关闭GUI窗口
def关闭(自我):
self.master.destroy()
root=Tk()
userGui=gui(根)
root.mainloop()
打印userGui.streamuser
赋值有效,但仅适用于callback()作用域的一组局部变量
这意味着,在函数终止后,您不会“看到”这些变量
绑定ENTER键和NumPad ENTER键,否则仅完成一半
因此,最初提出的代码很难处理同一函数中的每个不同事件上下文
更好地组织不同的事件/处理程序,您的事件处理将根据每个上下文变得更简单。在用户3666197的帮助下,我能够找出其中的一些问题,通过谷歌搜索,我找到了一个解决方案 我必须创建一个gui类,以便轻松存储和访问三个用户输入 至于绑定,我得到的错误是
callback()
(我重命名为assign()
)接受的参数太多。错误正好是TypeError:assign()接受的参数正好是1个(给定2个)
。因此我通过允许将尽可能多的参数传递到assign()函数def assign>中来解决这个问题(self,*args):
。实际上,我不太清楚为什么在按enter键后出现此错误,如果有人知道,请告诉我
from Tkinter import *
class gui:
def __init__(self, master):
self.master = master
# labels for each entry
Label(self.master, text="Steam Username").grid(row=0)
Label(self.master, text="Steam Password").grid(row=1)
Label(self.master, text="Email Password").grid(row=2)
# button widget
self.steamUserW = Entry(self.master)
self.steamPassW = Entry(self.master, show="*")
self.emailPassW = Entry(self.master, show="*")
self.submit = Button(self.master, text="Submit", command=self.assign)
# bind the ENTER key to callback function
self.emailPassW.bind("<Return>", self.assign)
self.emailPassW.bind("<KP_Enter>", self.assign)
# space out the widgets
self.steamUserW.grid(row=0, column=1)
self.steamPassW.grid(row=1, column=1)
self.emailPassW.grid(row=2, column=1)
self.submit.grid(row=3, column=1)
# grabs the values in the entry boxes and assigns them to variablse
def assign(self, *args):
self.steamUser = self.steamUserW.get()
self.steamPass = self.steamPassW.get()
self.emailPass = self.emailPassW.get()
self.close()
# closes GUI window
def close(self):
self.master.destroy()
root = Tk()
userGui = gui(root)
root.mainloop()
print userGui.steamUser
print userGui.emailPass
从Tkinter导入*
类gui:
定义初始(自我,主):
self.master=master
#每个条目的标签
标签(self.master,text=“Steam Username”).grid(行=0)
标签(self.master,text=“Steam Password”).grid(行=1)
标签(self.master,text=“电子邮件密码”).grid(行=2)
#按钮小部件
self.streamuserw=条目(self.master)
self.steamPassW=条目(self.master,show=“*”)
self.emailPassW=条目(self.master,show=“*”)
self.submit=按钮(self.master,text=“submit”,command=self.assign)
#将ENTER键绑定到回调函数
self.emailPassW.bind(“,self.assign)
self.emailPassW.bind(“,self.assign)
#将小部件隔开
self.streamuserw.grid(行=0,列=1)
self.steamPassW.grid(行=1,列=1)
self.emailPassW.grid(行=2,列=1)
self.submit.grid(行=3,列=1)
#获取输入框中的值并将其分配给variablse
def分配(自身,*参数):
self.streamuser=self.streamuserw.get()
self.steamPass=self.steamPassW.get()
self.emailPass=self.emailPassW.get()
self.close()
#关闭GUI窗口
def关闭(自我):
self.master.destroy()
root=Tk()
userGui=gui(根)
root.mainloop()
打印userGui.streamuser
打印userGui.emailPass
赋值不起作用的原始错误是因为您正在将值赋值给局部变量。它起作用,但回调之外的任何函数都看不到它们。解决方法是将变量声明为全局变量,或者重新构建代码以使用类,并使类具有变量属性
绑定的问题是回调需要接受一个参数。当您使用bind
时,调用的函数将始终传递一个参数。此参数是表示事件的对象。从该对象可以获得触发事件的小部件、光标的x/y坐标以及其他几个b它是信息的载体
对于原始代码,您可以按如下方式修复它:
# <anEventOBJECT>.char on-{ <KeyPress> | <KeyRelease> }
# .height on-{ <Configure> }
# .width on-{ <Configure> }
# .keysym on-{ <KeyPress> | <KeyRelease> }
# .keysym_num on-{ <KeyPress> | <KeyRelease> }
# .num on-{ <Mouse-1> | <Mouse-2> | ... } 4,5 == <MouseWheel> <--test on target platform O/S
# .serial <-- system-assigned Integer
# .time <-- system-assigned Integer ( .inc each msec )
# .widget <-- system-assigned <widget>-instance
# .x <-- system-assigned <Event>-in-<widget>-mouse-location.x
# .y <-- system-assigned <Event>-in-<widget>-mouse-location.y
# .x_root <-- system-assigned <Event>-on-<Screen>-mouse-location.x
# .y_root <-- system-assigned <Event>-on-<Screen>-mouse-location.y
from Tkinter import *
class gui:
def __init__(self, master):
self.master = master
# labels for each entry
Label(self.master, text="Steam Username").grid(row=0)
Label(self.master, text="Steam Password").grid(row=1)
Label(self.master, text="Email Password").grid(row=2)
# button widget
self.steamUserW = Entry(self.master)
self.steamPassW = Entry(self.master, show="*")
self.emailPassW = Entry(self.master, show="*")
self.submit = Button(self.master, text="Submit", command=self.assign)
# bind the ENTER key to callback function
self.emailPassW.bind("<Return>", self.assign)
self.emailPassW.bind("<KP_Enter>", self.assign)
# space out the widgets
self.steamUserW.grid(row=0, column=1)
self.steamPassW.grid(row=1, column=1)
self.emailPassW.grid(row=2, column=1)
self.submit.grid(row=3, column=1)
# grabs the values in the entry boxes and assigns them to variablse
def assign(self, *args):
self.steamUser = self.steamUserW.get()
self.steamPass = self.steamPassW.get()
self.emailPass = self.emailPassW.get()
self.close()
# closes GUI window
def close(self):
self.master.destroy()
root = Tk()
userGui = gui(root)
root.mainloop()
print userGui.steamUser
print userGui.emailPass
def callback(event):
global steamUser, steamPass, emailPass
steamUser = steamUserW.get()
steamPass = steamPassW.get()
emailPass = emailPassW.get()
root.destroy()
def callback(self, event):
...