如何将python事件变量传递给另一个函数?
我正在构建一个简单的GUI,在尝试将事件变量传递到另一个已经有事件变量的函数时遇到了一个问题 我试图在函数“addNumbs”中使用变量“sqlItemx”,它是“self.item1”的事件变量 如何传递此变量以供以后使用 我试着简单地按照通常的约定传递变量,但这对我来说不起作用 我的代码摘录如下:如何将python事件变量传递给另一个函数?,python,function,events,tkinter,parameters,Python,Function,Events,Tkinter,Parameters,我正在构建一个简单的GUI,在尝试将事件变量传递到另一个已经有事件变量的函数时遇到了一个问题 我试图在函数“addNumbs”中使用变量“sqlItemx”,它是“self.item1”的事件变量 如何传递此变量以供以后使用 我试着简单地按照通常的约定传递变量,但这对我来说不起作用 我的代码摘录如下: def listitems(self, event): for widget in self.itemFrame.winfo_children(): widget.dest
def listitems(self, event):
for widget in self.itemFrame.winfo_children():
widget.destroy()
searchLettersx = event.widget['text']
mycursor.execute("SELECT Name FROM inventory WHERE Name LIKE '" + searchLettersx + "%' ")
myresult = mycursor.fetchall()
rcount = 0
ccount = 0
for y in myresult:
self.item1 = tk.Button(self.itemFrame, text=y, bg='white', fg='deep sky blue', font=("Helvetica", 18), height='4', width='22')
self.item1.grid(column=ccount, row=rcount)
self.item1.bind('<Button-1>', self.addtoCart)
if rcount >= 5:
ccount += 1
rcount = 0
rcount += 1
def addtoCart(self, event):
win = tk.Toplevel(bg="white")
win.wm_title("Add to Cart")
sqlItemx = event.widget['text']
frame = tk.Frame(win)
frame.grid()
self.numpadFrame = tk.Frame(win, pady='20', bg="white")
self.numpadFrame.grid(column='0', row='2')
itemLabel = tk.Label(win, text=sqlItemx, bg="white", font=("Helvetica", 18), pady="30")
itemLabel.grid(row=0, column=0)
numLabel = tk.Label(win, text="How many? ", bg="white", font=("Helvetica", 18), pady="30", anchor='e', justify='left')
numLabel.grid(row=1, column=0)
numbers = ["1", "2", "3", "4" , "5" , "6" , "7" , "8" , "9" , " " , "0" , " "]
count = 0
for r in range(4):
for c in range(3):
numpad = tk.Button(self.numpadFrame, text=numbers[count], height='4', width='8', bg='white', fg='deep sky blue', font=("Helvetica", 18))
numpad.grid(row=r+1,column=c)
numpad.bind('<Button-1>', self.addNumbs)
count += 1
finalize = tk.Button(win, text="Submit", height='2', width='14', bg='white', fg='deep sky blue', font=("Helvetica", 18))
finalize.grid(column='0', row='7', columnspan='4')
finalize["command"] = win.destroy
def addNumbs(self, event):
numPadx = event.widget['text']
sql = "INSERT INTO tempcart (item, count) VALUES (%s, %s)"
val = ("item", numPadx)
addtempCart.execute(sql, val)
mydb.commit()
gettempCartID.execute("SELECT ID FROM tempcart ORDER BY ID DESC LIMIT 1")
gettempCartID_result = gettempCartID.fetchall()
gettempCart.execute("SELECT item, count FROM tempcart")
gettempCart_result = gettempCart.fetchall()
for y in gettempCart_result:
for z in gettempCartID_result:
self.cartItem = tk.Label(self.cartFrame, text=y, bg="white", font=("Helvetica", 20))
self.cartItem.grid(column="0", row=z)
mydb.commit()
def列表项(自身、事件):
对于self.itemFrame.winfo_children()中的小部件:
widget.destroy()
searchlettsx=event.widget['text']
mycursor.execute(“从清单中选择名称,其中名称类似于“'+SearchletsX+“%””)
myresult=mycursor.fetchall()
rcount=0
帐户=0
对于myresult中的y:
self.item1=tk.Button(self.itemFrame,text=y,bg='白色',fg='深天蓝',font=(“Helvetica”,18),高度='4',宽度='22'))
self.item1.grid(列=ccount,行=rcount)
self.item1.bind(“”,self.addtoCart)
如果rcount>=5:
帐户+=1
rcount=0
rcount+=1
def addtoCart(自身、事件):
win=tk.Toplevel(bg=“白色”)
win.wm_标题(“添加到购物车”)
sqlItemx=event.widget['text']
帧=传统帧(win)
frame.grid()
self.numpadFrame=tk.Frame(win,pady='20',bg=“white”)
self.numpadFrame.grid(列='0',行='2')
itemlab=tk.Label(win,text=sqlItemx,bg=“white”,font=(“Helvetica”,18),pady=“30”)
itemLabel.grid(行=0,列=0)
numLabel=tk.Label(win,text=“多少?”,bg=“white”,font=(“Helvetica”,18),pady=“30”,anchor='e',justify='left')
numLabel.grid(行=1,列=0)
数字=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“0”、“0”]
计数=0
对于范围(4)内的r:
对于范围(3)内的c:
numpad=tk.Button(self.numpadFrame,text=numbers[count],height='4',width='8',bg='white',fg='深天蓝',font=(“Helvetica”,18))
numpad.grid(行=r+1,列=c)
numpad.bind(“”,self.addNumbs)
计数+=1
finalize=tk.按钮(win,text=“Submit”,高度为2',宽度为14',背景为白色,前景为深天蓝色,字体为(“Helvetica”,18))
finalize.grid(列='0',行='7',列span='4')
最终确定[“命令”]=win.destroy
def添加编号(自身、事件):
numPadx=event.widget['text']
sql=“插入tempcart(项目,计数)值(%s,%s)”
val=(“项目”,numPadx)
addtempCart.execute(sql,val)
mydb.commit()
gettempCartID.execute(“按ID描述限制1从tempcart订单中选择ID”)
gettempCartID_result=gettempCartID.fetchall()
执行(“选择项目,从临时购物车计数”)
gettempCart\u result=gettempCart.fetchall()
对于gettempCart\u结果中的y:
对于gettempCartID_结果中的z:
self.cartItem=tk.Label(self.cartFrame,text=y,bg=“白色”,font=(“Helvetica”,20))
self.cartItem.grid(column=“0”,row=z)
mydb.commit()
我的最终目标是能够将此变量的值传递到“addNumbs”中,并将其用作MySQL语句的变量“val”中的值之一。您不需要通过
bind
方法将命令附加到按钮上;相反,您可以使用命令
关键字参数
为了传递item_-type参数,您需要迭代与创建的每个按钮对应的各种参数,并在创建按钮时将它们包含在函数调用中
也许是这样的:
...
list_of_items = [item0, item1, item2, ...]
item_buttons = [] # keep a reference on each button
for y, item in enumerate(list_of_items):
btn = tk.Button(self.itemFrame, command=lambda item=item: self.addtoCart(item), ...)
item_buttons.append(btn)
btn.grid(column=ccount, row=rcount)
...
您不需要通过
bind
方法将命令附加到按钮;相反,您可以使用命令
关键字参数
为了传递item_-type参数,您需要迭代与创建的每个按钮对应的各种参数,并在创建按钮时将它们包含在函数调用中
也许是这样的:
...
list_of_items = [item0, item1, item2, ...]
item_buttons = [] # keep a reference on each button
for y, item in enumerate(list_of_items):
btn = tk.Button(self.itemFrame, command=lambda item=item: self.addtoCart(item), ...)
item_buttons.append(btn)
btn.grid(column=ccount, row=rcount)
...
“self.item1=tk.Button(…”是无用的,您只得到了对
tk.Button(…
)的最后一次引用。重复您想做的事情没有帮助,一切都清楚了。更改为self.sqlItemx=…
并添加print(self.sqlItemx)
以查看您得到了什么。同时更改为numPadx=self.sqlltemx
。“我得到‘名称错误:名称‘sqlitemx’未定义’”:应该读self.sqlitemx
“self.item1=tk.Button(…”是无用的,您只得到了对tk.Button(…
)的最后一次引用。重复您想做的事情没有帮助,一切都清楚了。更改为self.sqlitemx=…
并添加print(self.sqlitemx)
查看您得到了什么。同时更改为numPadx=self.sqlltemx
。“我得到'名称错误:名称“sqlitemx”未定义'”:应该读为self.sqlitemx
。谢谢!这对我有效,我感谢您的帮助!谢谢!这对我有效,我感谢您的帮助!