在Tkinter中删除选定行
我该如何通过按一个按钮来删除选中的行并添加一行新行到一个表格中呢?
我已经创建了两个按钮,并为它们设置了相应的功能:
from tkinter import *
import tkinter as tk
def get_val(row, col):
table[row][col] = entry_vars[row][col].get()
def delete_row(row, col): # how to delete selected row need code
return
def add_row(row, col): # how to Add New row need code
return
root = tk.Tk()
height = 10
width = 10
table = [['' for i in range(height)] for j in range(width)]
entry_vars = []
for i in range(height):
row_vars = []
for j in range(width):
vary = tk.StringVar()
var.set(table[i][j])
entry = tk.Entry(root, textvariable=var)
entry.grid(row=i, column=j)
entry.bind('<FocusOut>', lambda event, row=i, col=j: get_val(row, col))
row_vars.append(var)
entry_vars.append(row_vars)
b = Button(root, text="Add New Row", command= lambda row=i, col=j: add_row(row, col), width=10)
b.grid(row=20, column=0)
b1 = Button(root, text="delete Row", command= lambda row=i, col=j: delete_row(row, col), width=10)
b1.grid(row=20, column=1)
root.mainloop()
1 个回答
0
我把你的代码重新写了一遍,补上了缺少的功能,并根据需要做了一些修改。希望你觉得这对你有帮助。
from tkinter import *
import tkinter as tk
def get_val(row, col):
values[row][col] = entry_vars[row][col].get()
def delete_row():
global height
height -= 1
# get all cells in a row and "forgets" them
for cell in root.grid_slaves(row=height):
cell.grid_forget()
# delete the row's values and entry variables
values.pop()
entry_vars.pop()
def add_row():
# the height is not a constant since rows could be added, and it is the best variable to indicate a new row's id
global height
row = height
height += 1
values.append(["" for _ in range(initial_width)])
# The code you wrote to make initial rows
row_vars = []
for j in range(initial_width):
var = tk.StringVar()
# removed the var.set since there is no initial values now
entry = tk.Entry(root, textvariable=var)
entry.grid(row=row, column=j)
entry.bind('<FocusOut>', lambda event, r=row, c=j: get_val(r, c))
row_vars.append(var)
entry_vars.append(row_vars)
root = tk.Tk()
height = 0
# changed to initial for clarity
initial_height = 10
initial_width = 10
# changed the table variable to be dynamic and renamed it
values = []
# no change after here
entry_vars = []
for i in range(initial_height):
add_row()
b = Button(root, text="Add New Row", command=add_row, width=10)
b.grid(row=20, column=0)
b1 = Button(root, text="delete Row", command=delete_row, width=10)
b1.grid(row=20, column=1)
root.mainloop()