Tôi đang làm việc trên một ứng dụng đang sử dụng nhiều widget (QgroupBox, QVBoxLayout, QHBoxLayout). Ban đầu nó được phát triển trên màn hình HD bình thường. Nhưng, gần đây nhiều người trong chúng ta đã nâng cấp lên màn hình độ phân giải 4K. Bây giờ một số nút và thanh trượt được nén nhỏ đến mức không thể sử dụng được.
Bây giờ tôi đã cố gắng thực hiện một số thay đổi để ứng dụng có thể được sử dụng với cả màn hình HD và 4K.
Tôi bắt đầu đọc liên kết dưới đây:
https://leomoon.com/journal/python/high-dpi-scaling-in-pyqt5/ nhập mô tả liên kết tại đây
Tôi nghĩ bất cứ khi nào cửa sổ của tôi được mở trong một màn hình cụ thể, tôi có thể gọi mã sau đây:
if pixel_x > 1920 and pixel_y > 1080:
Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, True)
Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
else:
Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, False)
Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, False)
Sau đó, tôi đã cố gắng để có được độ phân giải màn hình (pixel_x và pixel_y) bằng cách sử dụng mã dưới đây từ việc sử dụng bài đăng liên quan ở đây .
import sys, ctypes
user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
screen_width = 0 #78
screen_height = 1 #79
[pixel_x , pixel_y ] = [user32.GetSystemMetrics(screen_width), user32.GetSystemMetrics(screen_height)]
screen_width = 0, screen_height = 1
cung cấp cho tôi độ phân giải của màn hình chính của tôi (chủ yếu là máy tính xách tay trong trường hợp của chúng tôi là HD). screen_width = 78, screen_height = 79
cho tôi độ phân giải kết hợp của máy ảo. Nhưng tôi không hiểu làm thế nào tôi có thể tự động nhận được các giá trị này tùy thuộc vào nơi ứng dụng của tôi mở.
Cửa sổ ứng dụng của tôi được phát triển theo cách nó sẽ mở trong cùng một màn hình nơi nó được đóng lần trước. Vấn đề là bây giờ tôi muốn có được độ phân giải màn hình hoạt động bất cứ khi nào GUI của tôi được gọi và thích ứng với độ phân giải đó. Tôi sẽ rất vui nếu ai đó có thể giúp tôi.
Tôi muốn biết liệu tôi có thể gọi phép tính độ phân giải màn hình mỗi lần tôi kéo cửa sổ của mình từ màn hình HD sang màn hình 4K và ngược lại.
Chỉnh sửa: Tôi đã tìm thấy một cái gì đó tương tự trong bài viết này ở đây Nhưng tôi không thể nhận được nhiều từ này.
Edit2: Dựa trên giải pháp @Joe, Phát hiện màn hình chính, Tại sao màn hình chính của tôi luôn là độ phân giải máy tính xách tay của tôi mặc dù tôi chạy ứng dụng trên màn hình 4K?
Tôi chỉ cố gắng để có được dpi của tất cả các màn hình bằng cách sử dụng mã dưới đây:
def screen_selection():
app = QApplication(sys.argv)
valid_screens = []
for index, screen_no in enumerate(app.screens()):
screen = app.screens()[index]
dpi = screen.physicalDotsPerInch()
valid_screens.append(dpi)
return valid_screens