代码之家  ›  专栏  ›  技术社区  ›  avacariu

在wxpython中振动窗口

  •  1
  • avacariu  · 技术社区  · 14 年前

    我怎么才能在Wxpython振动一扇窗户呢?我想用一些方法来说明要花多长时间,距离之类的。

    是否有一个我没有注意到的内置函数,或者我必须自己对它进行编码?
    (我正在考虑将窗口侧移几次,但我希望有一个内置的功能,可以更快。)

    2 回复  |  直到 14 年前
        1
  •  5
  •   Anurag Uniyal    14 年前

    我不认为有这样的功能,但是你可以很容易地使用win.setposition来完成它。

    例如,单击内部框架进行振动

    import wx
    
    def vibrate(win, count=20, delay=50):
        if count == 0: return
        x, y = win.GetPositionTuple()
        dx = 2*count*(.5-count%2)
        win.SetPosition((x+dx,y))
        wx.CallLater(delay, vibrate, win, count-1, delay)
    
    app = wx.PySimpleApp()
    frame = wx.Frame(None, title="Vibrator")
    frame.Show()
    frame.Bind(wx.EVT_LEFT_DOWN, lambda e:wx.CallAfter(vibrate, frame))
    app.SetTopWindow(frame)
    app.MainLoop()
    
        2
  •  0
  •   avacariu    14 年前

    在人们回答我的问题之前,我一直在研究我自己的方法。我只开始了GUI编程,所以我不知道wx的所有特性,所以我最终使用了 time 模块。Anurag的方法可能更好,因为它使用WX函数,但是我将在这里发布它作为另一种方法。
    注: 这可能并不总是有效(我很难让它在同一操作系统上与不同的解释程序一起工作)。所以使用Anurag的方法。

    import wx
    
    def vibrate(windowName, distance=15, times=5, speed=0.05, direction='horizontal'):
        #Speed is the number of seconds between movements
        #If times is odd, it increments so that window ends up in same location
        import time
        if not times % 2 == 0:
            times += 1
        location = windowName.GetPositionTuple()
        if direction == 'horizontal':
            newLoc = (location[0] + distance, location[1])
        elif direction == 'vertical':
            newLoc = (location[0], location[1] + distance)
        for x in range(times):
            time.sleep(speed)
            windowName.Move(wx.Point(newLoc[0], newLoc[1]))
            time.sleep(speed)
            windowName.Move(wx.Point(location[0], location[1]))
    
    app = wx.App()
    
    frame = wx.Frame(None, -1, 'Vibrator')
    frame.Show()
    
    vibrate(frame)
    
    app.MainLoop()