python pygtk如何在特定的显示器上放置一个窗口

时间:2014-03-31 21:54:21

标签: python linux pygtk multiple-monitors

我在OS Linux上使用Python PyGTK库(suse,ubuntu) 使用具有多个显示监视器的设备。

我试图在连接到设备的特定显示器监视器上放置一个全屏窗口(在python中,gtk.Window)。

我使用以下代码:

n_monitors = gtk.gdk.Screen.get_n_monitors()  # Get number of monitors. 
gtk.gdk.Screen.get_monitor_geometry(*monitor_number*)  # Get the size of a specific monitor. 

第二个api返回监视器大小和偏移信息。 gtk.Window.move(offset_x, offse_y)可用于在特定监视器上移动窗口。

虽然这似乎并不是一直有效。看起来窗口与鼠标位置具有亲和力,或者如果监视器分辨率不同,则不起作用。

gtk.Window是否有任何属性可以帮助缓解此问题。 我尝试过以下没有帮助的玩法:

gtk.Window.set_position(gtk.WIN_POS_NONE)
gtk.Window.set_gravity(gtk.gdk.GRAVITY_NORTH_WEST)

任何想法。

1 个答案:

答案 0 :(得分:6)

您的显示器共同组成一个屏幕。您可以查询屏幕以了解其监视器。然后,您可以通过将窗口(x,y)与显示器的窗口(x,y)相对应,将窗口定位在给定的监视器上。

假设您的窗口为window,您可以像这样进入屏幕

screen = window.get_screen()

然后像这样获取监视器数据

monitors = []
for m in range(screen.get_n_monitors())
  monitors.append(screen.get_monitor_geometry(m)

监视器是数字0,1,2,...如果需要,您可以获取当前监视器,如下所示:

screen.get_monitor_at_window(screen.get_active_window())

要在监视器上放置窗口,请将监视器(x,y)添加到窗口(x,y)。计算那些x,y值,然后移动窗口:

window.move(x,y)

请参阅我提供的类似答案here