【问题标题】:Wxpython Filter dropdown not working in latest version 4.1.1 same example working with 4.0.7 versionWxpython 过滤器下拉菜单在最新版本 4.1.1 中不起作用 与 4.0.7 版本相同的示例
【发布时间】:2021-12-23 17:10:14
【问题描述】:

在事件中将值分配给组合框时,它将再次触发相同的事件并且程序进入无限循环。但是相同的代码在 wxpython 版本 4.0.7 中工作。如果我做错了什么,请纠正我。

import wx      
    class Mywin(wx.Frame):
        def __init__(self, parent: object, title: object) -> object:
            super(Mywin, self).__init__(parent, title=title, size=(300, 200))
            self.languages = ['C', 'C++', 'Python', 'Java', 'Perl']
    
            panel = wx.Panel(self)
            box = wx.BoxSizer(wx.VERTICAL)
    
            self.label = wx.StaticText(panel, label="Your choice:", style=wx.ALIGN_CENTRE)
            box.Add(self.label, 0, wx.EXPAND | wx.ALL, 20)
    
            cblbl = wx.StaticText(panel, label="Combo box", style=wx.ALIGN_CENTRE)
            box.Add(cblbl, 0, wx.EXPAND | wx.ALL, 5)
    
            self.combo = wx.ComboBox(panel, choices=self.languages)
            box.Add(self.combo, 1, wx.EXPAND | wx.ALL, 5)
    
            box.AddStretchSpacer()
            self.combo.Bind(wx.EVT_TEXT, self.oncombo)
            self.ignoreEvtText = False
    
            panel.SetSizer(box)
            self.Centre()
            self.Show()
    
        def oncombo(self, event):
    
            if self.ignoreEvtText:
                self.ignoreEvtText = False
                return
    
            textEntered = event.GetString()
    
            self.label.SetLabel("You selected" + self.combo.GetValue() + " from Combobox" + textEntered)
    
            if textEntered:
                self.ignoreEvtText = True
                matching = [s for s in self.languages if textEntered in s]
                self.combo.Set(matching)
                self.combo.SetInsertionPoint(len(textEntered))
                self.combo.SetValue(textEntered)
            else:
                self.combo.Set(self.languages)
    
            self.combo.Popup()
    
    
    app = wx.App()
    Mywin(None, 'ComboBox and Choice demo')
    app.MainLoop()

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    用途:

    self.combo.Bind(wx.EVT_COMBOBOX, self.oncombo)

    而不是:

    self.combo.Bind(wx.EVT_TEXT, self.oncombo)

    EVT_TEXT 使您陷入持续的事件循环。

    每次文本改变,如果触发事件,改变文本,触发事件,......

    【讨论】:

    • 是的,我使用了 self.combo.Bind(wx.EVT_COMBOBOX, self.oncombo) 但功能无法按我的意愿工作,此事件适用于选择,我想自动填充列表输入的文字。是什么。
    • @Sudarshan 目前还不清楚,对我来说,你想用这个实现什么。按照编码,您将初始列表选项限制为您选择的单个选项。您是否尝试添加用户输入的额外选项?如果是这种情况,请添加 style wx.TE_PROCESS_ENTER 并绑定到事件 wx.EVT_TEXT_ENTER。如果没有,请编辑您的问题以准确解释您想要什么。提供一个例子,之前和之后。
    猜你喜欢
    • 2015-05-22
    • 2012-06-08
    • 2021-09-04
    • 2014-11-19
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多