Tkinter - 动态从网格中删除行

问题描述 投票:0回答:2

我有一些代码读取 .csv 文件,然后使用网格显示内容并迭代行/列来打包它们,如下所示:

from tkinter import *
import csv

def createStandardTable(f,window):
    global trow
    global table
    global w
    global sizes
    global record
    global column
    handle = csv.reader(f)
    length = len(next(handle))

    sizes = [0] * length
    for record in handle:

        for p,column in enumerate(record):
            if len(column) > sizes[p]:
                sizes[p] = len(column)+3

    f.seek(0)
    trow = 0
    table = Frame(window)
    for record in handle:
        for w,column in enumerate(record):
            print(w)
            setText = StringVar()
            Entry(table,textvariable=setText,width=sizes[w]+5,relief="groove",justify=LEFT, background='white').grid(column=w,row=trow,sticky=W)
            setText.set(column)

        trow+=1
    return table

def delete_row():
    l=list(table.grid_slaves(row=trow))
    print(l)
    for w in l:
        w.grid_forget()

def new_row():
    global trow
    for w,column in enumerate(record):
        Entry(table,textvariable="",width=sizes[w]+5,relief="groove",justify=LEFT, background='white').grid(column=w,row=trow,sticky=W)
        print (trow)
    trow+=1

root = Tk()
f = open("example.csv")
newButton = Button(text='new row', command=new_row)
deleteButton = Button(text='delete row', command='delete_row')
newtable = createStandardTable(f,root)
newtable.pack()
newButton.pack()
deleteButton.pack()
root.mainloop()

example.csv 看起来像这样:

ID  | Name | username | password
1234| Bob  | test123  | l98762

当按下“新行”按钮时,它成功创建了一个新行。但是,每当按下“删除行”按钮时,它都不会删除最近的行,我不明白为什么不这样做?

有人可以解释一下出了什么问题吗? 谢谢。

python python-3.x tkinter python-3.5
2个回答
0
投票

我无法测试它,因为您没有提供工作示例,但我注意到的第一件事是您在添加行之后增加了 trow ,所以最后一行是 trow - 1。因为您需要无论如何要减少它,只需在尝试删除之前执行此操作即可。

def delete_row(): trow -= 1 l=list(table.grid_slaves(row=trow)) for w in l: w.grid_forget()

或者更好的是,忘记使用自己的变量并使用

table.grid_size()

 查找要添加或删除的行。 

编辑:您似乎还向按钮传递了一个字符串,而不是函数。将该行更改为:

deleteButton = Button(text='delete row', command=delete_row)
    

0
投票
先生,我们感谢您的回复。提供的代码删除最后一行;但是,我们需要删除特定行的功能,例如 2、3 和 100,或用户选择的任何其他行。

© www.soinside.com 2019 - 2024. All rights reserved.