【问题标题】:How to handle wxPython TextCtrls that influence each other's content如何处理影响彼此内容的 wxPython TextCtrls
【发布时间】:2013-04-05 16:02:13
【问题描述】:

我正在尝试在 wxPython 中构建 GUI。我有两个 TextCtrls。假设它们是first_index_inputlast_index_input,它们分别控制model.f_imodel.l_i。有一个条件:为了正确执行模型,model.f_i 必须 first_index_input的内容应该是last_index_input。

所以我想做的是修复它,以便:1)如果用户在first_index_input 中输入的值大于last_index_input 中的值(在先前的用例或其他东西中建立),那么@987654329 @ 和 model.l_i 都将设置为等于新的 first_index_input。 2)如果用户输入的last_index_input小于first_index_input,那么last_index_input将再次被更正并设置为等于first_index_input

那有什么难的呢?这是要关闭什么事件的问题。假设first_index_input 的内容为“145”,我(正确地)想给last_index_input 输入 10324。如果这个小部件关闭 wx.EVT_TEXT 事件,那么它不会等我输入“10324”。一旦它看到“1”(即第一个数字),它就会吓坏并说:“不!那小于first_index_input”并“纠正”我的打字。另一方面,我可以通过关闭 wx.EVT_TEXT_ENTER 命令来摆脱这种情况,并且一切正常只要我记得在输入我的值后按回车并且我从不记得按返回,所以我相信我的用户也不会。

还有其他方法可以做到这一点吗?也许还有其他可用的事件?谢谢。

【问题讨论】:

    标签: python events wxpython textctrl


    【解决方案1】:

    我会将 EVT_TEXT 与 wx.Timer 一起使用。这里的想法是监控自用户上次在第二个控件中键入内容以来的时间。因此,您的起始值将为零 (self.start_value),并且每次 EVT_TEXT 触发时,您都将重置该值并重新启动计时器。当 EVT_TIMER 事件被触发时,它将增加起始值。您必须在计时器的事件处理程序中放置一个“if”语句,以检查起始值是否大于 X 秒。如果是,则检查第一个输入是否小于第二个输入并采取相应措施。确保停止计时器,因为它是一个正在运行的计时器对象,当您关闭它时可能会挂起应用程序。

    这是定时器的链接:http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多