【发布时间】:2019-04-22 17:54:49
【问题描述】:
我正在构建一个简单的 GUI,但在尝试将事件变量传递给另一个已经具有事件变量的函数时遇到了问题。
我正在尝试将变量“sqlItemx”(它是“self.item1”的事件变量)用于函数“addNumbs”。
如何传递此变量以供以后使用?
我尝试按照通常的约定简单地传递变量,但这对我不起作用。
我的代码摘录如下:
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()
我的最终目标是能够将此变量的值传递给“addNumbs”,并将其用作我的 MySQL 语句的变量“val”中的值。
【问题讨论】:
-
"self.item1 = tk.Button(..." 没用,你只有最后一个引用
tk.Button(...。 -
重复你想做的事并没有帮助,一切都很清楚。更改为
self.sqlItemx = ...并将print(self.sqlItemx)添加到查看您会得到什么。也改成numPadx = self.sqlltemx。 -
“我得到'名称错误:名称“sqlitemx”未定义'”:应该是
self.sqlItemx。
标签: python function events tkinter parameters