python pygtk 如何将窗口放置在特定显示器上

4 投票
1 回答
6288 浏览
提问于 2025-04-18 00:45

我在使用Python的PyGTK库,操作的是基于Linux的系统(像是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, offset_y)可以用来把窗口移动到特定的显示器上。

不过,这个方法似乎并不是每次都有效。看起来窗口的位置会受到鼠标位置的影响,或者如果显示器的分辨率不一样,这个方法就不管用了。

有没有什么gtk.Window的属性可以帮助解决这个问题? 我尝试了一些方法,但都没有效果:

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

有没有什么好的建议?

1 个回答

6

你的显示器一起组成了一个 屏幕。你可以查询这个屏幕来了解它的显示器信息。然后,你可以通过调整窗口的 (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)

你可以在 这里 查看我提供的类似回答。

撰写回答