【问题标题】:Remove whole Entry row (5 boxes) in tkinter在 tkinter 中删除整个条目行(5 个框)
【发布时间】:2022-01-19 12:47:10
【问题描述】:

我有一个按钮和一个函数,每次单击它时都会在换行符中创建 5 个输入框

def __init__(self, master):
    [...]
    self.rows_list = 2
    self.new_button = ttk.Button(self.tab1, text='Add', command=self.new_window).grid(column=5, row=0)

def new_window(self):
    rows = self.rows_list
    labels = 5
    for x in range(labels):
        ttk.Entry(self.tab1).grid(column=int(x), row=rows)
    self.rows_list += 1

我正在努力使删除按钮删除最后一行。尝试了多种“互联网解决方案”,但都没有帮助。

【问题讨论】:

  • 你能发布一个不起作用的工作程序吗? .-)
  • 将它们保存到列表中,遍历列表以删除。

标签: python tkinter tkinter-entry


【解决方案1】:

对于您的情况,由于您将 self.row_list 用作创建这些新条目的下一行,因此您可以使用此变量获取最后一行中的小部件并销毁它们:

    def __init__(self, master):
        ...

        self.rows_list = 2
        ttk.Button(self.tab1, text='Add', command=self.new_window).grid(column=5, row=0)
        ttk.Button(self.tab1, text='Remove', command=self.remove_row).grid(column=6, row=0)

    ...

    def remove_row(self):
        if self.rows_list > 2:
            # get widgets in last row
            widgets = self.tab1.grid_slaves(row=self.rows_list-1)
            # and destroy them
            for w in widgets:
                w.destroy()
            # update self.rows_list
            self.rows_list -= 1

请注意,此解决方案基于发布的代码,如果这些条目的同一行中有其他小部件,则可能无法正常工作。

【讨论】:

  • 就像一个魅力!我想我从来不知道grid_slaves。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
相关资源
最近更新 更多