我有一个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)
答案 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)