Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取wxpython中按钮的位置_Python_Button_Position_Wxpython_Sizer - Fatal编程技术网

获取wxpython中按钮的位置

获取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

我试图找出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(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)