我在tkinter
中有以下代码Row_n = 0
def new_line(event,Row_n):
Row_n = Row_n + 1
Choose = tk.Label(frame, text="Text", background = "white",font = ("Helvetica",13),fg = "blue")
Choose.grid(row = Row_n, column = 0, sticky = 'nsew')
print(Row_n)
return Row_n
root.bind('<Shift-Return>',lambda event,Row_n = Row_n: new_line(event,Row_n))
此代码生成一个文本为" text "的新行。函数new_line还返回变量"Row_n"的新值。它应该是原来的Row_n + 1。问题是返回的值总是1,因为我不能将返回的值赋给全局变量Row_n。我需要找到一种方法来分配返回给变量Row_n的值,以便下次运行函数new_line时,Row_n的入口值为1,返回值为2。
事先谢谢你
正如您所说,您无法从事件回调的返回值更新Row_n
,因此其中一种方法是将Row_n
声明为回调内部的全局,而不是将其作为参数传递:
Row_n = 0
def new_line(event):
global Row_n # declare Row_n as global variable
Row_n = Row_n + 1
Choose = tk.Label(frame, text="Text", background = "white",font = ("Helvetica",13),fg = "blue")
Choose.grid(row = Row_n, column = 0, sticky = 'nsew')
print(Row_n)
root.bind('<Shift-Return>', new_line)
然而,有另一种方法不使用全局变量,通过frame.grid_size()
获得frame
内部使用的行:
def new_line(event):
# grid_size() returns (columns, rows)
Row_n = frame.grid_size()[1]
Choose = tk.Label(frame, text="Text", background="white", font=("Helvetica",13), fg="blue")
Choose.grid(row=Row_n, column=0, sticky='nsew')
print(Row_n)
我假设frame
只是用来保存这些标签。