【问题标题】:How to use onButtonClick(self) to update a wx.ComboBox如何使用 onButtonClick(self) 更新 wx.ComboBox
【发布时间】:2013-09-25 16:05:34
【问题描述】:

我正在使用下面的代码来填充组合框。但是,当我运行我的应用程序时,它会检测指定路径中的所有媒体文件......如果我在应用程序运行时碰巧添加了另一个文件并尝试单击组合框的下拉按钮,项目列表在组合框中没有用最近添加的项目更新,这就是问题所在:

...
...
...
#Select Media path
os.chdir("c:\\ffmpeg\\bin")
wrkdir = os.getcwd()
filelist = os.listdir(wrkdir)
self.formats1 = []

for filename in filelist:
    (head, filename) = os.path.split(filename)
    if filename.endswith(".avi") or filename.endswith(".mp4") or filename.endswith(".flv") or filename.endswith(".mov") or filename.endswith(".mpeg4") or filename.endswith(".mpeg") or filename.endswith(".mpg2") or filename.endswith(".mkv") or filename.endswith(".m4v") or filename.endswith(".wav") or filename.endswith(".mp3"):
            self.formats1.append(filename)

self.format_combo1=wx.ComboBox(panel, size=(140, -1),value='Select Media', choices=self.formats1, style=wx.CB_DROPDOWN, pos=(300,50))

...
...
....

经过一番阅读,我发现 wx.ComboBox 是 wxControlWithItems、wx.combo.ComboCtrl 和 wx.Choice 的子类,所以它也可以使用它们的方法。我找到了一种方法 (OnButtonClick()),听起来它会做我需要做的事情 - 一旦单击下拉箭头,使用目录中的项目更新组合框列表。但是,没有关于如何使用它的描述。有人可以引导我朝着正确的方向前进。谢谢!

【问题讨论】:

    标签: python-2.7 combobox wxpython


    【解决方案1】:

    您可以捕获组合框事件 'wx.EVT_COMBOBOX_DROPDOWN 并设置要出现的项目。

    注意:WxPython 版本 2.9.5

    •EVT_COMBOBOX_DROPDOWN(id, func): 处理 wxEVT_COMBOBOX_DROPDOWN 事件,该事件在组合框的列表框部分显示(下拉)时生成。请注意,目前只有 wxMSW 和 wxGTK 支持 GTK+ 2.10 或更高版本。

    import wx
    
    
    class Mainframe(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent)
            panel = wx.Panel(self)
            self.count = 1
    
            self.combo_box = wx.ComboBox(panel, size=(140, -1),
                value='Select choice', choices=[])
            self.combo_box.Bind(wx.EVT_COMBOBOX_DROPDOWN, self.on_combo_drop)
    
        def on_combo_drop(self, event):
            self.combo_box.Set(['Item{}'.format(number) for
                                number in xrange(self.count, self.count + 5)])
            self.count += 5
    
    
    if __name__ == '__main__':
        app = wx.App(False)
        frame = Mainframe(None)
        frame.Show()
        app.MainLoop()
    

    【讨论】:

      【解决方案2】:

      真的没有办法捕捉你想要的事件。您可能需要创建自定义控件或改用 ComboCtrl。

      有关一些想法,请参阅以下主题:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-15
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 2016-09-15
        • 1970-01-01
        相关资源
        最近更新 更多