【发布时间】:2010-08-03 03:55:43
【问题描述】:
如何在 wxPython 中振动窗口。我想要一些方法来指定它要花多长时间,距离和类似的东西。
是否有我没有注意到的内置函数,或者我必须自己编写代码?
(我正在考虑将窗口横向移动几次,但我宁愿有一个可能更快的内置函数。)
【问题讨论】:
标签: python user-interface wxpython wxwidgets
如何在 wxPython 中振动窗口。我想要一些方法来指定它要花多长时间,距离和类似的东西。
是否有我没有注意到的内置函数,或者我必须自己编写代码?
(我正在考虑将窗口横向移动几次,但我宁愿有一个可能更快的内置函数。)
【问题讨论】:
标签: python user-interface wxpython wxwidgets
我不认为有任何这样的功能,但是您可以使用 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 函数,但无论如何我都会在这里发布它作为另一种方法。
注意:这可能并不总是有效(我无法获取它可以与同一操作系统上的不同解释器一起使用)。所以使用 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()
【讨论】: