wxPython 圖形界面程序時 多個顯示器問題。

在使用wxpython的時候也許會遇見這樣的問題。軟件用戶或者潛在用戶可能使用多個顯示器,而且顯示器設置並不是簡單的投影而是擴展設置,這樣的話,顯示器的尺寸就超過了單一顯示器的尺寸,而是兩個現實器的綜合。 原文 http://zicowarn.blog.51cto.com/3815716/1765440

在需要調整窗口位置的時候,當使用SetPosition(Point, Flag)的時候就應該考慮到偏移量Offset。因爲用戶打開軟件的可能並不是在主顯示器上面,也許主窗口在第二個顯示器上面。如果單純的使用SetPostion()的話,可能窗口會在主顯示器上面。


那麼首先如何簡單準確地獲得顯示器的數量和每一個顯示器的尺寸呢? 下列兩行代碼可以幫你解決問題。displays 可以理解爲wx.Display實力的列表。第二行代碼返回一個尺寸,也就是分辨率的列表。

該列表保存了所有現實的分辨率信息。

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

因爲用戶顯示器的分辨率可能會發生變化。用戶顯示器的設置也有可能不同,有可能第二顯示器在主顯示器的左邊,也有可能在右邊。那麼單單或者顯示器的分辨率,手動設置位置偏移量顯得有點不夠高效。


首先我們要確定,主窗口或者Frame (toplevel Windows)的位置,是在主顯示器上還是在第二個顯示器上面。 

使用此函數來得到主窗口的位置:

rts = wx.Display.GetFromWindow(parent)

參數parent, 是需要確定位置的窗口,返回值rts有三種可能(假設有兩個顯示器):

-1, 窗口位於連個顯示器之間

0, 主顯示器上

1, 第二個顯示器上。

當主窗口位於第二個現實上面的時候我們在調整窗口就要考慮偏移量。在忽略用戶顯示器設置的情況下,我們可以通過,

wx.Display(indexOfMonitor).GetGeometry()

此方法獲得任一顯示器的與主顯示器的相對位置。 該方法返回Rect實例。爲一個tuple。 

Rect(x, y, width, height)

x爲該顯示器與主顯示器的(0,0)點x軸偏移量,

y爲該顯示器與主顯示器的(0,0)點y軸偏移量。

可以通過:

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

獲得單一軸的偏移量或者通過:

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

一次獲得兩個軸的偏移量。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章