0

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

所以我想要做的是修复它,以便:1)如果用户输入的值first_index_input大于last_index_input(在先前的用例中建立的)中的值,那么last_index_input两者model.l_i都将设置为等于新的first_index_input. 2) 如果用户输入的 alast_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 命令来摆脱这种情况,只要我记得在输入我的值后按回车并且我从不记得按回车,所以一切正常,所以我确信我的用户也不会。

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

4

1 回答 1

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/

于 2013-04-15T13:36:34.717 回答