如何震动wxPython中的窗口。我想要一些指定多久的时间和距离等方式。wxPython中的震动窗口
是否有一个内置函数我没有注意到,还是我必须自己编写它?
(我想把窗户向旁边移动几次,但我宁愿有一个内置功能可能会更快。)
如何震动wxPython中的窗口。我想要一些指定多久的时间和距离等方式。wxPython中的震动窗口
是否有一个内置函数我没有注意到,还是我必须自己编写它?
(我想把窗户向旁边移动几次,但我宁愿有一个内置功能可能会更快。)
我不认为有任何这样的功能,但你可以轻松地做它使用win.SetPosition
eg点击里面的框架振动
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函数,但是我会在这里发布这个作为另一种方式。
NOTE:这可能无法正常工作(我无法在同一OS上使用差异解释器)。所以使用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()
这正是我所期待的。你可以在我的回答中看到我在做什么。 虽然这似乎并没有为我运行,但我敢肯定,这只是我(我有不同的IDE,有些人觉得运行一些代码,有些人不)。没有错误信息,所以这绝对是我的解释者的问题。 – avacariu 2010-08-03 05:48:56
你使用的是什么版本的wxPython? - AttributeError:'module'object has no attribute'CallLater' – remosu 2010-08-03 08:22:48
@remosu,>>> wx.VERSION - >(2,8,10,1,''),我想知道你的版本是什么? – 2010-08-03 14:02:10