【问题标题】:Removing Row from Kivy GridLayout or Refreshing GridLayout从 Kivy GridLayout 中删除行或刷新 GridLayout
【发布时间】:2018-03-27 14:35:50
【问题描述】:

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

在 GridLayout 我有一个按钮。我试图让按钮在运行其命令后从 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)

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    我将容器布局更改为 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2014-08-30
      • 2014-07-16
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多