【问题标题】:wxSlider updating wxTextCtrl and Vice VersawxSlider 更新 wxTextCtrl 和 Vice Versa
【发布时间】:2023-04-03 14:36:02
【问题描述】:

我有多个小部件,格式如下:

    self.sl_qZone1 = wx.Slider(self, -1, 50, integer=True, 0, 100, size=(sliderWidthHeight), style=wx.SL_HORIZONTAL)
    self.tc_qZone1 = wx.TextCtrl(panel, -1, 50, (0,0), style=wx.TE_CENTER)

我有一些事件绑定到十几个滑块/文本控件:

        wx.FindWindowByName(mvName['sl0']).Bind(wx.EVT_SLIDER, lambda event: self.sliderUpdate(event, wx.FindWindowByName(mvName['sl0']), wx.FindWindowByName(mvName['tc0']),), wx.FindWindowByName(mvName['sl0']))
        wx.FindWindowByName(mvName['tc0']).Bind(wx.EVT_CHAR, lambda event: self.tcVolUpdate(event, wx.FindWindowByName(mvName['sl0']), wx.FindWindowByName(mvName['tc0']),), wx.FindWindowByName(mvName['tc0']))

然后我有这些功能:

    def sliderUpdate(self, event, slider, textctrl):
        textctrl.SetValue(str(slider.GetValue()))

    def tcVolUpdate(self, event, slider, textctrl):
        slider.SetValue(int(textctrl.GetValue()))    

当我修改滑块时效果很好——它用适当的值更新了 textctrl。但是当我尝试编辑 textctrl 时,它让我选择文本但实际上并没有编辑它。我也试过wx.EVT_TEXT_ENTER,但没有成功。

如何使文本 ctrl 可更新并让它更新滑块的值?

【问题讨论】:

    标签: wxpython wxtextctrl


    【解决方案1】:

    在 textctrl 上设置样式以包含 wx.TE_PROCESS_ENTER,然后您可以在绑定时使用 EVT_TEXT_ENTER。

    #!/usr/bin/python  
    import wx
    
    class ex2(wx.Dialog):
        def __init__(self, parent, id, title):
            wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(400, 420))
    
            panel = wx.Panel(self, -1)
            vbox = wx.BoxSizer(wx.HORIZONTAL)
            self.sl_qZone1 = wx.Slider(panel, -1, 50, 0, 100, size=(20,200), style=wx.SL_HORIZONTAL)
            self.tc_qZone1 = wx.TextCtrl(panel, -1, value="", style=wx.TE_CENTER|wx.TE_PROCESS_ENTER)
    
            self.sl_qZone1.Bind(wx.EVT_SLIDER, lambda event: self.sliderUpdate(event, self.sl_qZone1,self.tc_qZone1))
            self.tc_qZone1.Bind(wx.EVT_TEXT_ENTER, lambda event: self.tcVolUpdate(event, self.sl_qZone1,self.tc_qZone1))
    
            vbox.Add(self.sl_qZone1, 1, wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT | wx.BOTTOM, 15)
            vbox.Add(self.tc_qZone1, 1, wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, 20)
            panel.SetSizer(vbox)
            self.Centre()
    
        def sliderUpdate(self, event, slider, textctrl):
            textctrl.SetValue(str(slider.GetValue()))
    
        def tcVolUpdate(self, event, slider, textctrl):
            slider.SetValue(int(textctrl.GetValue()))    
    
    
    class MyApp(wx.App):
        def OnInit(self):
            frame = ex2(None, -1, 'Example 2')
            frame.ShowModal()
            frame.Destroy()
            return True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多