Окно вибрации в wxPython - PullRequest
       14

Окно вибрации в wxPython

1 голос
/ 03 августа 2010

Как бы я вибрировать окно в wxPython. Я хотел бы указать способ, как долго это делать, расстояние и все в таком духе.

Есть ли встроенная функция, которую я не замечаю, или мне придется самому ее кодировать?
(Я думаю о перемещении окна в сторону несколько раз, но я бы предпочел встроенную функцию, которая может быть быстрее.)

Ответы [ 2 ]

5 голосов
/ 03 августа 2010

Я не думаю, что есть какая-либо такая функция, но вы можете легко сделать это, используя 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()
0 голосов
/ 03 августа 2010

Пока люди не ответили на мой вопрос, я работал над своим методом. Я только начал программировать с помощью графического интерфейса, поэтому я не знаю всех возможностей wx, поэтому я использовал модуль time. Метод Анурага, вероятно, лучше, так как он использует функции wx, но в любом случае я опубликую это здесь как еще один способ сделать это.
ПРИМЕЧАНИЕ: Это может не всегда работать (у меня проблемы с настройкой работы с интерпретаторами различий в одной и той же ОС). Так что используйте метод Анурага.

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()
...