【问题标题】:wx.grid does not update number of rowswx.grid 不更新行数
【发布时间】:2012-12-22 01:27:51
【问题描述】:

我正在尝试在更改表数据后通过调用 grid.ForceRefresh() 来更新 wx.grid.PyGridTableBase。但是,行数不会刷新,因此表仍显示原始(更新前)行数。有什么办法可以完全更新网格吗?

【问题讨论】:

  • 如果您可以创建一个非常小的可运行代码示例,以尽可能少的行演示问题,那么提供帮助会更容易。

标签: python grid wxpython wxwidgets


【解决方案1】:

您可能忘记通知网格您所做的更改。您可以在 wxPython 演示中找到一个示例,或者您可以阅读这个关于该主题的旧线程:

https://groups.google.com/forum/?fromgroups=#!msg/wxpython-users/z4iobAKq0os/zzUL70WzL_AJ

上面写着:

msg = wx.grid.GridTableMessage(self,          # The table
      wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED, # what we did to it
      1                                       # how many
      )

msg = wx.grid.GridTableMessage(self,          # The table
      wx.grid.GRIDTABLE_NOTIFY_ROWS_INSERTED, # what we did to it
      5,                                      # from which row
      1                                       # how many
      )

msg = wx.grid.GridTableMessage(self,          # The table
      wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED,  # what we did to it
      5,                                      # from which row
      1                                       # how many
      )

紧随其后

self.GetView().ProcessTableMessage(msg)

您也可以在 wxPython wiki 上阅读相关内容:http://wiki.wxpython.org/wxGrid

【讨论】:

  • 我想就是这样。我没有调用任何这些方法。由于我不跟踪发生了什么变化,有没有办法说“发生了一些变化”(添加了行、删除了行、更改了内容)并且它会完全刷新?
  • 我不确定数据是如何变化的。如果它在后端发生变化,那么您只需要使用 wx.Timer 进行某种检查或刷新。如果用户已经更新了网格本身,那么您应该能够使用 EVT_GRID_CELL_CHANGE 检测到
  • 通过一些用户交互改变了它。假设该表显示了一个目录的文件,并且用户选择了一个不同的目录。可能有更多文件、更少文件、不同文件名等。我不一定知道发生了什么变化。有没有办法说整个网格数据无效,所以表格完全刷新?
  • 这是一个非常糟糕的设计,你会认为它只是从 wxGridTableBase 请求行数。
猜你喜欢
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多