python - 选择某些显示器以使用 gtk 全屏显示

标签 python gtk fullscreen gtk3

我打算更改显示全屏窗口的监视器。 这在连接投影仪时特别有趣。

我试过使用 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()

(move 函数会将窗口移动到相对于其父窗口的位置 (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 全屏显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39367246/

相关文章:

Python 基于磁盘的字典

python - 想要程序循环的说明 (Python)

python - boto3 使用 AWS Lambda 启动/停止 RDS 实例

c - Webkit GTK : Exposing HTTP headers

python - PyGTK:允许在 AccelGroup 中使用 Tab

opengl - 如何在 Mac OS 中的 NSOpenGLView 和全屏上下文之间共享纹理?

python - 使用 "ComboboxSelected"的一个函数来读取多个组合框

ubuntu - Webkit 浏览器的检查器缺少一些东西

cocoa - NSOpenGLView 从 View 内切换到全屏

screenshot - 如何在全屏模式下拍摄命令提示符窗口的快照