python – 选择某个监视器以使用gtk全屏显示

我打算更改我显示全屏窗口的显示器.
将投影仪连接起来时,这一点尤其有趣.

我试过使用fullscreen_on_monitor,但这不会产生任何明显的变化.

这是一个非工作的例子:

#!/usr/bin/env python
import sys

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk

w = Gtk.Window()

screen = Gdk.Screen.get_default()
print ("Montors: %d" % screen.get_n_monitors())
if len(sys.argv) > 1:
    n = int(sys.argv[1])
else:
    n = 0

l = Gtk.Button(label="Hello, %d monitors!" % screen.get_n_monitors())
w.add(l)
w.show_all()

w.fullscreen_on_monitor(screen, n)
l.connect("clicked", Gtk.main_quit)
w.connect("destroy", Gtk.main_quit)
Gtk.main()

无论我提供什么价值,我都可以看到同一台显示器上的窗口(满分为3).

我的问题是:如何让全屏窗口出现在另一台显示器上?

最佳答案
问题似乎是Gtk只是忽略了监视器编号,它将始终全屏显示当前窗口所在的监视器上的窗口.这很糟糕,但我们可以使用它来使它按照我们想要的方式工作.

但首先有一些关于多个显示器的理论,它们实际上并不是你电脑的独立显示器.它认为它们共同形成一个共享相同全球起源的屏幕.在该全局屏幕上,每个监视器都具有相对于全局原点的原点,就像窗口一样.

因为我们知道Gtk将始终全屏显示在窗口所在的监视器上,我们可以使用window.move(x,y)将窗口移动到监视器的原点,然后调用window.fullscreen().

(移动功能会将窗口移动到相对于父窗口的位置(x,y),在主窗口的情况下是全局屏幕.)

结合所有这些我们得到这个,它在Windows 10上完美运行:

def fullscreen_at_monitor(window, n):
    screen = Gdk.Screen.get_default()

    monitor_n_geo = screen.get_monitor_geometry(n)
    x = monitor_n_geo.x
    y = monitor_n_geo.y

    window.move(x,y)

    window.fullscreen()

转载注明原文:python – 选择某个监视器以使用gtk全屏显示 - 代码日志