作者: Jim Wang 公众号: 巴博萨船长

摘要:在使用wxpython的时候也许会遇见这样的问题。软件用户或者潜在用户可能使用多个显示器,而且显示器设置并不是简单的投影而是扩展设置,这样的话,显示器的尺寸就超过了单一显示器的尺寸,而是两个现实器的综合。

Abstract: When using the wxpython may encounter this problem. Software users or potential users may use multiple displays, and the display settings are not simple projections but extended settings. In this case, the size of the display exceeds the size of a single display, but a combination of two realities.

作者: Jim Wang 公众号: 巴博萨船长

背景

在使用wxpython的时候也许会遇见这样的问题。软件用户或者潜在用户可能使用多个显示器,而且显示器设置并不是简单的投影而是扩展设置,这样的话,显示器的尺寸就超过了单一显示器的尺寸,而是两个现实器的综合。

正文

在需要调整窗口位置的时候,当使用SetPosition(Point, Flag)的时候就应该考虑到偏移量Offset。因为用户打开软件的可能并不是在主显示器上面,也许主窗口在第二个显示器上面。如果单纯的使用SetPostion()的话,可能窗口会在主显示器上面。

那么首先如何简单准确地获得显示器的数量和每一个显示器的尺寸呢? 下列两行代码可以帮你解决问题。displays 可以理解为wx.Display实力的列表。第二行代码返回一个尺寸,也就是分辨率的列表。

该列表保存了所有现实的分辨率信息,如下:

1
2
displays = (wx.Display(i) for i in range(wx.Display.GetCount()))
sizes = [display.GetGeometry().GetSize() for display in displays]

因为用户显示器的分辨率可能会发生变化。用户显示器的设置也有可能不同,有可能第二显示器在主显示器的左边,也有可能在右边。那么单单或者显示器的分辨率,手动设置位置偏移量显得有点不够高效。

首先我们要确定,主窗口或者Frame (toplevel Windows)的位置,是在主显示器上还是在第二个显示器上面。

使用此函数来得到主窗口的位置:

1
rts = wx.Display.GetFromWindow(parent)

参数parent, 是需要确定位置的窗口,返回值rts有三种可能(假设有两个显示器):

  • -1, 窗口位于连个显示器之间
  • 0, 主显示器上
  • 1, 第二个显示器上。

当主窗口位于第二个现实上面的时候我们在调整窗口就要考虑偏移量。在忽略用户显示器设置的情况下,我们可以通过,

1
wx.Display(indexOfMonitor).GetGeometry()

此方法获得任一显示器的与主显示器的相对位置。 该方法返回Rect实例。为一个tuple。

1
Rect(x, y, width, height)

x为该显示器与主显示器的(0,0)点x轴偏移量,

y为该显示器与主显示器的(0,0)点y轴偏移量。

可以通过:

1
2
offset_x_pos = wx.Display(indexOfMonitor).GetGeometry().GetX()
offset_y_pos = wx.Display(indexOfMonitor).GetGeometry().GetY()

获得单一轴的偏移量或者通过:

1
wx.Display(indexOfMonitor).GetGeometry().GetPosition()

一次获得两个轴的偏移量。

才疏学浅,欢迎交流提意见彼此提高。需要声明一下51cto博客作者zuiwuxin就是作者本人,所以不存在版权问题。以后该博客将作为个人文章的主要发布地。


版权声明:
文章首发于 Jim Wang's blog , 转载文章请务必以超链接形式标明文章出处,作者信息及本版权声明。