从Kivy GridLayout或刷新GridLayout中删除行

时间:2018-03-27 14:35:50

标签: python kivy

我有一个kivy应用程序,它显示从windows命令输出生成的pandas数据帧中的数据。

在GirdLayout我有一个按钮。我试图让它在运行命令后从GridLayout中删除一行。 我已经想出如何从GridLayout中删除按钮,但似乎无法弄清楚其余部分。

或者,通过重新运行windows命令并生成新的数据帧来刷新布局也可以。

我已经查看了这个答案,但我们无法以有效的方式将其应用到我的代码中。

Kivy Removing elements from a Stack- / GridLayout

def removeRow(self, instance):
    #This removes the button
    self.remove_widget(instance)

    #I've tried all 3 of these to refresh the GridLayout
    super(MakeTable, self).__init__()
    super(MakeTable, self).do_layout()
    MakeTable.do_layout(self)

我的 init 用于构建GridLayout

def __init__(self, **kwargs):
    table = ["Stuff"]
    df = pandas.DataFrame(table)

    super(MakeTable, self).__init__(**kwargs)
    self.cols = 2
    for index, row in df.iterrows():
            btnremove = Button(text="Remove")
            btnremove.bind(on_press=self.removeRow)
            self.add_widget(btnremove)
            lblUser = Label(text=row['USERNAME'])
            self.add_widget(lblUser)

1 个答案:

答案 0 :(得分:0)

我将容器布局更改为BoxLayout并更改了 init 以将项目添加到GridLayout,然后将其添加到BoxLayout。 这允许我在单击按钮的父级上使用remove_widget。

def removerow(self, instance):
    self.remove_widget(instance.parent)

def __init__(self, **kwargs):
    grid = GridLayout()
    grid.cols = 2
    lblUser = Label(text=row['USERNAME'])
    grid.add_widget(lblUser)
    lblServer = Label(text=row['SERVER'])
    grid.add_widget(lblServer)
    self.add_widget(grid)