当我在程序中初始化主窗口时,我可以愉快地使用以下方式设置窗口位置:
self.MoveXY(G_hpos,G_vpos)
或
self.Move(wx.Point(G_hpos,G_vpos))
或
self.SetPosition(wx.Point(G_hpos, G_vpos))
它们都同样有效,但是,如果我想要使用相同的代码更改初始位置但是在同一个类中的另一个函数中,则没有任何反应。 我在这里错过了一些非常简单的东西,或者我只是一个糟糕的发型日 注意:这是使用Linux
答案 0 :(得分:0)
这是一个糟糕的发型日!
我试图在实际改变之前根据另一个窗口的输入改变位置,所以本质上我将位置改为当前位置。
对于对这个问题感兴趣的人,这是一个演示:
# -*- coding: utf-8 -*-
import wx
import time
class MainFrame(wx.Frame):
def __init__(self, *args, **kwds):
# kwds["pos"] = (10,10)
self.frame = wx.Frame.__init__(self, *args, **kwds)
self.SetTitle("Move around the screen")
self.InitUI()
def InitUI(self):
self.location1 = wx.Point(10,10)
self.location2 = wx.Point(500,500)
self.panel1 = wx.Panel(self)
self.button1 = wx.Button(self.panel1, -1, label="Move", size=(80,25), pos=(10,10))
self.button1.Bind(wx.EVT_BUTTON, self.OnItem1Selected)
self.Show()
self.Move(self.location1)
def OnItem1Selected(self, event):
self.MoveAround()
def MoveAround(self):
#Judder effect by moving the window
for i in range(30):
curr_location = self.GetPosition() #or self.GetPositionTuple()
if curr_location == self.location1:
print ("moving to ", self.location2)
self.Move(self.location2) #Any of these 3 commands will work
# self.MoveXY(500,500)
# self.SetPosition(wx.Point(500,500), wx.SIZE_USE_EXISTING)
else:
print ("moving to ", self.location1)
self.Move(self.location1) #Any of these 3 commands will work
# self.MoveXY(10,10)
# self.SetPosition(wx.Point(10,10), wx.SIZE_USE_EXISTING)
self.Update()
time.sleep(0.1)
if __name__ == '__main__':
app = wx.App()
frame = MainFrame(None)
app.MainLoop()
N.B。在您的代码返回到主循环之前,移动本身似乎不会发生,因此,例如,如果您尝试通过在同一函数内多次更改位置多次来创建抖动效果,则只会看到它移动到最终位置,没有颤抖。
缺少的元素实际上是对self.Update()
的调用。