Cách phát hiện kích thước màn hình vật lý của máy tính trong GTK


8

Tôi đã gặp phải lỗi này trong khi viết ứng dụng của mình. Nói tóm lại, kích thước cửa sổ của ứng dụng là cố định, không hoạt động tốt với các màn hình nhỏ hơn như trong netbook.

Trong đó, các nút thấp hơn nằm ngoài giới hạn màn hình và không thể được sử dụng. Tôi muốn tính đến điều này trong giao diện người dùng, nhưng trước hết, tôi muốn tìm hiểu cách tiêu chuẩn để phát hiện kích thước màn hình trong GTK, nếu có.

Vì vậy, có ai có bất kỳ ý tưởng về cách làm điều đó?


Chỉ cần động não: Còn các thiết lập đa màn hình với các kích cỡ khác nhau thì sao?
Vilmantas Baranauskas

Có vẻ như sử dụng kích thước màn hình ở đây là giải pháp sai. Có ảnh chụp màn hình tốt của các cửa sổ nơi đây là một vấn đề?
dobey

Câu trả lời:


11
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print(s.get_width())
print(s.get_height())

Tất nhiên, nếu bạn có nhiều màn hình, điều này cho kích thước của một hình chữ nhật bao quanh cả hai. Thứ này khó hơn âm thanh, trong một thế giới có nhiều màn hình trong đó ...


Bạn thực sự cần chọc vào Màn hình thay vì Màn hình, để có được kích thước màn hình riêng lẻ, IIRC.
dobey

Đã thử nghiệm vào ngày 14.04, nó hoạt động.
Seth

Nếu bạn có nhiều màn hình thì kích thước màn hình sẽ lớn hơn. Giải pháp trên không hoạt động nếu bạn muốn kích thước của màn hình . Xem câu trả lời của @justin cho điều đó.
guettli

Tôi thấy DeprecationWarning: get_creen bị phản đối
NoBugs

6

Đây là những gì tôi đã đưa ra:

from gi.repository import Gdk, Gtk

# Replace w with the GtkWindow of your application
w = Gtk.Window()
# Get the screen from the GtkWindow
s = w.get_screen()
# Using the screen of the Window, the monitor it's on can be identified
m = s.get_monitor_at_window(s.get_active_window())
# Then get the geometry of that monitor
monitor = s.get_monitor_geometry(m)
# This is an example output
print("Heigh: %s, Width: %s" % (monitor.height, monitor.width))

Tôi không chắc chắn rằng nó sẽ được gọi là "tiêu chuẩn", nhưng tôi hy vọng rằng nó sẽ giúp ích.


Cảm ơn rât nhiều. Giải pháp của bạn hoạt động ngay cả khi cửa sổ chưa được nhận ra.
guettli

3

Tôi muốn nói những gì bạn muốn là câu trả lời cho câu hỏi sau đây:

Một cửa sổ sẽ lớn đến mức nào nếu nó được tối đa hóa?

Bởi vì bên cạnh việc thiết lập nhiều màn hình còn có các vấn đề khác như kích thước của bảng trên cùng, bảng dưới cùng (không còn trong Ubuntu, nhưng có thể là các bản phân phối khác), trang trí cửa sổ, ... Điều này thực sự không được Gtk xử lý mà bởi cửa sổ giám đốc. Vì vậy, tôi không thấy bất kỳ cách nào để có được số này trừ khi bạn để windowmanager thực sự tối đa hóa.

Do đó, câu trả lời cho câu hỏi này rất dễ:

from gi.repository import Gtk, GObject
w = Gtk.Window()
w.maximize()
def p():
    print w.get_size()
GObject.timeout_add(1000, p)
w.show()
Gtk.main()

Vì vậy, bạn có thể tạo một cửa sổ, tối đa hóa nó và sau đó bắt đầu điền vào nó với các vật dụng có kích thước hợp lý.


2

Bạn có thể lấy chiều rộng và chiều cao tính bằng milimét bằng phương pháp này:

from gi.repository import Gdk
display = Gdk.Display.get_default()
monitor = display.get_monitor(0)
return monitor.get_width_mm(), monitor.get_height_mm()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.