我正在尝试在wxPython中构建一个GUI。我有两个TextCtrls。假设它们是first_index_input
和last_index_input
,它们分别控制model.f_i
和model.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)如果用户输入的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命令来摆脱这种情况,只要我记得在输入我的值后回复,就一切正常 我永远不会记得打返回,所以我相信我的用户也不会。
还有其他办法吗?还有其他一些可用的活动吗?谢谢。
答案 0 :(得分:1)
我会将EVT_TEXT与wx.Timer一起使用。这里的想法是监视用户上次在第二个控件中输入内容的时间。因此,您的起始值为零(self.start_value),每次EVT_TEXT触发时,您将重置该值并重新启动计时器。当EVT_TIMER事件被触发时,它将增加起始值。您必须在timer的事件处理程序中放置一个“if”语句,以检查起始值是否大于X秒。如果是,则检查第一个输入是否小于第二个并相应地采取行动。确保你停止计时器,如果它是一个正在运行的计时器对象可以在你关闭它时挂起应用程序。
以下是关于计时器的链接:http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/