WXPYTHON很棘手

时间:2016-09-06 17:58:53

标签: multithreading button while-loop wxpython

我有一个textctrl框 - 我每隔1秒就会连续读取数据。我有一个按钮,当值低于50时必须启用。我有一段代码,这使得GUI无法响应。在我在这里介绍的代码中,我等到值小于50.然后启用开始按钮

    while self.pressure_text_control.GetValue()>50:
        self.start.Disable()
        time.sleep(1)
    self.start.Enable()

这整个代码都在另一个按钮事件中。

   def OnDone(self, event):
        self.WriteToControllerButton([0x04])
        self.status_text.SetLabel('PRESSURE CALIBRATION DONE \n DUMP PRESSURE')
        self.led1.SetBackgroundColour('GREY')
        self.done.Disable()
        self.add_pressure.Disable()
        while self.pressure_text_control.GetValue()>50:
            self.start.Disable()
            time.sleep(1)
        self.start.Enable()

pressure_text_control中的值每1秒更新一次。

1 个答案:

答案 0 :(得分:0)

设置wx.timer为您完成工作,这将释放GUI主循环,即使其响应。
wx.Timer类允许您以指定的时间间隔执行代码。 https://wxpython.org/Phoenix/docs/html/wx.Timer.html

    self.timer = wx.Timer(self)
    self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
    self.timer.Start(1000)

def OnTimer(self, event):
    "Check the value of self.pressure_text_control here and do whatever"

在关闭程序之前不要忘记self.timer.Stop()