繁体   English   中英

wxPython中的振动窗口

[英]Vibrate window in wxPython

我将如何在wxPython中振动窗口。 我想要某种方式指定执行操作的时间以及距离和类似内容。

是否有我没有注意到的内置函数,或者我必须自己编写该函数?
(我正在考虑将窗口横向移动几次,但我希望有一个内置的功能,该功能可能会更快。)

我认为没有这样的功能,但是您可以使用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()

在人们回答我的问题之前,我一直在研究自己的方法。 我只是开始进行GUI编程,所以我不知道wx的所有功能,因此最终使用了time模块。 Anurag的方法可能更好,因为它使用wx函数,但是无论如何我都会在这里发布它作为另一种方法。
注意:这可能并不总是有效(我无法使其与同一OS上的diff解释器一起使用)。 因此,请使用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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM