我正在尝试在wxPython中构建GUI。我有两个textctrl。假设它们是first_index_input
和last_index_input
,它们分别控制model.f_i
和model.l_i
。这里有一个条件:为了正确的模型执行,建模。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)如果用户输入的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
"one_answers"纠正"我的打字。另一方面,我可以去掉这个通过去掉一个wx。EVT_TEXT_ENTER命令,一切都工作得很好,只要我记得在输入值后按回车键,我从不记得按回车键,所以我确信我的用户也不会。
还有别的方法吗?也许还有其他的活动?谢谢。
我将EVT_TEXT与wx.Timer一起使用。这里的想法是监视用户上次在第二个控件中输入内容的时间。所以你将有一个0的开始值(self.start_value),并且每次EVT_TEXT触发时,你将重置该值并重新启动计时器。当EVT_TIMER事件被触发时,它将增加起始值。您必须在计时器的事件处理程序中放置一个"if"语句,该语句检查开始值是否大于X秒。如果是,那么检查一下第一个输入是否比第二个输入少,并采取相应的行动。确保你停止定时器,如果它是一个运行定时器对象,可以挂起应用程序,当你去关闭它。
这里有一个关于计时器的链接:http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/