2016-09-07 35 views
5

Tôi định thay đổi màn hình ở nơi tôi hiển thị cửa sổ toàn màn hình. Điều này đặc biệt thú vị khi có máy chiếu nối.chọn một số màn hình để hiển thị toàn màn hình với gtk

Tôi đã cố gắng sử dụng fullscreen_on_monitor nhưng điều đó không tạo ra bất kỳ thay đổi hiển thị nào.

Dưới đây là một ví dụ không làm việc:

#!/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() 

Tôi có thể nhìn thấy cửa sổ trên rất giống màn hình (trong số 3), không phụ thuộc vào giá trị tôi cung cấp.

Câu hỏi của tôi là: làm cách nào để làm cho cửa sổ toàn màn hình xuất hiện trên màn hình khác?

Trả lời

3

Vấn đề có vẻ là Gtk chỉ bỏ qua số màn hình, nó sẽ luôn luôn toàn màn hình cửa sổ trên màn hình mà cửa sổ hiện đang được định vị. Điều này hút, nhưng chúng ta có thể sử dụng nó để làm cho nó hoạt động theo cách chúng ta muốn.

Nhưng trước tiên một số lý thuyết về nhiều màn hình, chúng không thực sự là màn hình riêng biệt cho máy tính của bạn. Nó xem xét chúng để tạo thành một màn hình chung có cùng nguồn gốc toàn cầu. Trên màn hình toàn cầu đó, mỗi màn hình có nguồn gốc tương ứng với nguồn gốc toàn cầu, giống như các cửa sổ.

Vì chúng tôi biết rằng Gtk sẽ luôn toàn màn hình trên màn hình mà cửa sổ chúng ta chỉ cần di chuyển cửa sổ đến nguồn gốc của màn hình bằng cách sử dụng window.move(x,y) và sau đó gọi window.fullscreen().

(Chức năng move sẽ di chuyển cửa sổ đến một vị trí (x,y) liên quan đến nó là phụ huynh, mà trong trường hợp của cửa sổ chính là màn hình toàn cầu.)

Kết hợp tất cả điều này chúng ta có được điều này, mà làm việc một cách hoàn hảo trên 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() 
+0

bạn có thể sao lưu "Gtk chỉ bỏ qua số màn hình" bằng mã không? 'gtk_window_fullscreen_on_monitor' như được định nghĩa ở đây: https://git.gnome.org/browse/gtk+/tree/gtk/gtkwindow.c#n10502 cuối cùng gọi' gdk_window_fullscreen_on_monitor' được định nghĩa ở đây: https://git.gnome.org/browse/ gtk +/tree/gdk/gdkwindow.c? id = ea1295c9ab40ab8c1b5b80ccf1575710c5ff6b86 # n10820 thì tôi không biết cách tiếp tục theo dõi. –

+0

Nếu bạn nhìn vào mã nguồn, tất cả mọi thứ thực sự xuất hiện tốt. Vì vậy, gốc của vấn đề là rất có thể hoặc là trong Ràng buộc Python GTK hoặc trong Trình quản lý cửa sổ. Để sao lưu câu lệnh này, mã của riêng bạn đã hiển thị nó, việc đặt một số màn hình khác không dẫn đến hành vi khác. Mã ở dưới cùng tuy nhiên không hoạt động :) – B8vrede

+1

Tôi xác nhận rằng nó hoạt động. Cảm ơn! FTR: Tôi đang chạy Gnome 3.18 trên Ubuntu 16.04. –

Các vấn đề liên quan