【问题标题】:How to clear all widgets from all sizers?如何清除所有尺寸器中的所有小部件?
【发布时间】:2019-12-12 09:18:24
【问题描述】:

我有一个带有很多 TextCtrl 和一些 ComboBoxes 的 GUI(用 wxPython 创建)。它们分布在不同的尺寸上。

目前我正在为我拥有的所有尺码做这个:

    children = self.hbox.GetChildren() 
    for child in children:
        widget = child.GetWindow()
        if isinstance(widget, wx.TextCtrl):
            widget.Clear() 
        if isinstance(widget, wx.ComboBox):
            widget.SetValue("")  

有没有办法获取一个类的所有 Sizer,然后在 for 循环或类似的东西中执行它?

【问题讨论】:

  • 你使用哪个python包? tkinter ?
  • wxPython。我编辑我的帖子以使其更清楚!
  • 您可以在创建时将所有 TextCtrl 添加到一个列表中。
  • 我知道,但这最终会产生 60 多行代码。它会起作用,但我认为它不是很实用。

标签: python python-3.x wxpython


【解决方案1】:

您可以遍历包含窗口的所有子窗口,而不是 Sizer,使用 wx.Window.GetChildren。当然,只有当你有一个扁平的结构时,它才会起作用,我猜你没有。因此,您可以递归地执行此操作:

def clean_up(window):
    if isinstance(window, TextCtrl):
        window.Clear()
    for i in window.GetChildren():
        clean_up(i)

顺便说一句,ComboBox 和 TextCtrl 都是 TextEntry 的后代,因此您可以:

if isinstance(window, TextEntry):
    window.Clear()

【讨论】:

  • ComboBox and TextCtrl are ancestors of TextEntry。这是一个很好的收获!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多