获取wxpython中按钮的位置
我试图找出wxpython中两个按钮的位置。我有一个gui,左侧有一个小的垂直面板,右侧有一个大面板获取wxpython中按钮的位置,python,button,position,wxpython,sizer,Python,Button,Position,Wxpython,Sizer,我试图找出wxpython中两个按钮的位置。我有一个gui,左侧有一个小的垂直面板,右侧有一个大面板 wx.Frame.__init__(self, *args, **kwds) self.Splitter = wx.SplitterWindow(self, -1)#, style=wx.SP_NOSASH) self.Panel1 = wx.Panel(self.Splitter, -1) self.Panel3 = wx.Panel(s
wx.Frame.__init__(self, *args, **kwds)
self.Splitter = wx.SplitterWindow(self, -1)#, style=wx.SP_NOSASH)
self.Panel1 = wx.Panel(self.Splitter, -1)
self.Panel3 = wx.Panel(self.Splitter, -1)
self.Splitter.SplitVertically(self.Panel1,self.Panel3,350)
在右侧面板(笔记本电脑)中,我使用垂直尺寸尺堆叠三个面板:
self.Notebook3 = wx.Notebook(self.Panel3, -1)
self.OptPane = scrolled.ScrolledPanel(self.Notebook3, -1)
self.pane1 = wx.Panel(self.OptPane,-1, style=wx.NO_BORDER)
self.pane2 = wx.Panel(self.OptPane,-1, style=wx.RAISED_BORDER)
self.pane3= wx.Panel(self.OptPane,-1, style=wx.NO_BORDER)
我的窗格3包含三个使用gridsizer组织的按钮(一行三列)。一切看起来都很棒。现在,我希望能够获得三个按钮的屏幕位置(它们根据屏幕分辨率、用户调整gui大小等而变化)
我的屏幕大小是(19201080),它源自wx.GetDisplaySize()
。我试过self.button1.GetScreenPosition()和self.pane3.GetScreenPosition和self.button1.GetPosition()。第一个返回位置(77,93),第二个返回位置(61,95),最后一个返回位置(0,0)。使用testtext=wx.StaticText(self.Notebook3,-1,'X marks spot',pos=(240820))
进行测试后,我发现我想要返回的按钮的位置大约是(240820)。这是我要退的号码
有人知道我做错了什么吗?谢谢
*编辑*
我的完整代码应该是可运行的——我在1920x1080上运行它(对于文本“x标记点”)
我认为你要求这个职位太早了。您需要在所有内容都呈现到屏幕上之后获取位置,因此可能需要使用wxPython的CallAfter。创建一个如下所示的方法:
def printLocation(self):
""""""
print self.Button1.GetScreenPosition()
然后在初始化的末尾添加以下行:
wx.CallAfter(self.printLocation)
当我在我的系统上运行它时,我得到了(155211),这可能更接近于您所寻找的。我有一个很奇怪的决定
您可能还想看看这个线程,它讨论了滚动窗口的CalcUnscrolledPosition方法
.GetScreenPosition()
没有问题。请参见上面的内容。谢谢这确实改变了数字。然而,它把我放在第2栏的(179691)。还是有点奇怪。您可以尝试使用WidgetInspectionTool来解决这个问题。看,它可以告诉你小部件的位置。首先,这是一个很好的工具!我运行了这个程序,它显示按钮位于Widget下的位置(166,0)和SizerItem下的位置(222,28)。这仍然没有意义…好吧,开枪!我想我会推荐交叉发布到wxPython谷歌群/邮件列表,看看他们有什么要说的。谢谢,我会试试的!
wx.CallAfter(self.printLocation)