当wx.CallAfter结束时,wxPython会做一些事情

时间:2016-08-07 23:45:48

标签: python multithreading wxpython

所以我写了类Smooth(),你可以用它来平滑地改变wx.Window的大小 - 不是一次打勾,而是更像幻灯片。 它工作正常,除了我希望IncreaseWidth()方法仅在窗口达到其完整大小时返回,而是在我调用它后立即返回,并且窗口继续滑动。 我需要在窗口完成增长之前使用IncreaseWidth()方法稍微阻塞

我已经尝试了很多工作,我尝试使用wx.Timer,线程实现该方法,但它们似乎都立即返回。 我也尝试过像

这样的事情
while self.window.GetSize()[0] != self.final:
    pass

但它似乎以某种方式阻止了计时器/线程/ callafter,它冻结了整个帧。

任何提示?谢谢

import wx
import time
import threading


class Smooth(wx.Panel):

    def __init__(self, window):
        wx.Panel.__init__(self, window, -1,  size = (0,8))
        self.window = window

    def IncreaseWidth(self, width):
        self.mid = width/2 + self.window.GetSize()[0]
        self.final = width + self.window.GetSize()[0]
        self.acc = 1

        self.inc()

    def inc(self):
        if self.window.GetSize()[0] < self.mid:
            self.window.SetSize((self.window.GetSize()[0] + self.acc,     self.window.GetSize()[1]))
            self.acc +=1
            wx.CallLater(30, self.inc)
        elif self.window.GetSize()[0] > self.mid and self.window.GetSize()[0] < self.final:
            self.window.SetSize((self.window.GetSize()[0] + self.acc, self.window.GetSize()[1]))
            self.acc -=1
            wx.CallLater(30, self.inc)
        else:
            return

0 个答案:

没有答案