相关疑难解决方法(0)

如何获得Tkinter的屏幕尺寸?

我想知道是否可以使用tkinter计算屏幕大小.

我想要这样可以让程序在屏幕中央打开...

python tkinter

29
推荐指数
2
解决办法
4万
查看次数

使用跨平台支持的python调整显示分辨率

使用python函数调整显示分辨率.它应该是跨平台的,即支持windows,linux和mac(根据操作系统可以有多个案例)

我有代码,我认为在Linux上工作(Ubuntu)我正在寻找一个Windows和Mac的解决方案(应该支持32和64位机器)

def SetResolution(width, height):
    os.popen("xrandr -s "+str(width)+'x'+str(height))
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我如何获得windows和mac可能的显示分辨率,我也会感激不尽

我在linux上的功能是这样的:

def GetResolutions():
    screen = os.popen("xrandr").readlines()
    possibleResolutions = []
    for a in screen:
        data = a.split()
        if len(data)<4:
            width, height = data[0].split('x')
            fps = re.sub("[^0-9.]", "", data[1])
            possibleResolutions.append({'width':int(width),'height':int(height),'fps':float(fps)})
            if '*' in data[1]:
                currentResolution = {'width':int(width),'height':int(height),'fps':float(fps)}
    return possibleResolutions, currentResolution
Run Code Online (Sandbox Code Playgroud)

python windows cross-platform desktop-application screen-resolution

13
推荐指数
2
解决办法
1万
查看次数

如何在Pygame中获得监视器的分辨率?

我只是想知道我是否有可能在Pygame中获得显示器的分辨率,然后使用这些尺寸创建一个窗口,以便启动程序检测显示器分辨率,然后自动将窗口全屏显示在屏幕上.

我目前正在使用pygame.display.set_mode((AN_INTEGER, AN_INTEGER))创建窗口.我知道您可以获取视频信息,包括使用的显示器分辨率,pygame.display.Info()但我如何提取这些值,然后在pygame.display.set_mode()???中使用它们?

提前谢谢,Ilmiont

python pygame resolution window dimensions

12
推荐指数
3
解决办法
2万
查看次数

GetSystemMetrics()为SM_CXSCREEN返回错误的值

我遇到了一个有趣的问题.至少在Vista中,当桌面DPI设置未设置为100%时,getSystemMetrics(SM_CXSCREEN)返回不正确的值.例如,我在1366x768屏幕中尝试了150%,而getSystemMetrics()返回911而不是1366(和1366/1.5~911)

根据MSDN,getSystemMetrics(SM_CXSCREEN)返回像素,所以我认为这个值不受DPI设置的影响 - 但确实如此.那么有没有更安全的方法来找出真正的,未缩放的屏幕分辨率?

winapi dpi screen-resolution

9
推荐指数
3
解决办法
7326
查看次数

如何使用tkinter在辅助显示器中创建一个全屏窗口?

我知道如何在"主"显示屏上全屏显示一个窗口,但即使将我的应用程序窗口移动到连接到我的电脑的辅助显示器,当我打电话时:

self.master.attributes('-fullscreen', True)
Run Code Online (Sandbox Code Playgroud)

为了全屏显示该窗口,它在"主"显示屏中显示,而不是在辅助显示屏中显示(应用程序的窗口从辅助显示屏中消失,并立即显示在"主屏幕"中,全屏显示).

如何在辅助显示屏中全屏显示?

python screen tkinter fullscreen

9
推荐指数
1
解决办法
3701
查看次数

如何使用 python PyQt5 确定我的应用程序(窗口)的活动屏幕(监视器)?

我正在开发一个使用许多小部件(QGroupBox、QVBoxLayout、QHBoxLayout)的应用程序。最初它是在普通的高清显示器上开发的。但是,最近我们中的许多人升级到了 4K 分辨率的显示器。现在一些按钮和滑块被压缩得非常小以至于无法使用。

现在我尝试进行一些更改,以便该应用程序可以与 HD 和 4K 显示器一起使用。

我开始阅读以下链接:

https://leomoon.com/journal/python/high-dpi-scaling-in-pyqt5/在此处输入链接描述

我想每当我的窗口在特定监视器中打开时,我都可以调用以下代码:

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)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下代码获取显示器分辨率(pixel_x 和 pixel_y),使用相关帖子here

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)]
Run Code Online (Sandbox Code Playgroud)

screen_width = 0, screen_height = 1给了我主显示器的分辨率(在我们的案例中主要是笔记本电脑,它们是高清的)。screen_width = 78, screen_height = 79给了我虚拟机的组合分辨率。但我不明白如何根据我的应用程序打开的位置动态获取这些值。

我的应用程序窗口的开发方式是,它将在上次关闭的同一监视器中打开。现在的问题是,每当我的 GUI 被调用并适应该分辨率时,我都想获得活动监视器分辨率。如果有人可以帮助我,我会很高兴。

我很想知道每次将窗口从高清显示器拖动到 4K 显示器时是否可以调用屏幕分辨率计算,反之亦然。

编辑:我在这里的这篇文章中发现了类似的东西,但我无法从中得到太多。

Edit2:基于@Joe …

python user-interface resolution pyqt5 pythoninterpreter

9
推荐指数
2
解决办法
2442
查看次数

Python tkinter屏幕宽度和高度辅助显示

我有一个双显示器设置(笔记本电脑屏幕和外部显示器).我的笔记本电脑屏幕是我的主显示屏,外接显示器是次要的 两者都有不同的屏幕尺寸.

在我的python tkinter脚本中,我使用winfo_screenwidth()winfo_screenheight()检测屏幕宽度和高度,以便我可以将根窗口设置为全屏.

通常,当我运行我的脚本时,根窗口将是我的笔记本电脑屏幕的大小.当我将窗口移动到扩展显示器时,我希望它自动调整宽度和高度以匹配外部显示器的宽度和高度.

这可能吗?有没有办法检查根窗口是在主显示器还是辅助显示器?

winfo_screenwidth()检测二次显示器的宽度和高度?

编辑:我使用的是Windows XP Pro 32位和Python 2.7.

python tkinter

6
推荐指数
1
解决办法
5605
查看次数

在 Python TkInter 应用程序中检测 DPI/缩放因子

我希望我的应用程序能够检测到它是否在 HiDPI 屏幕上运行,如果是,则自行扩展以供使用。正如在这个问题中所说,我知道我需要设置一个比例因子,这个因子应该是我的 DPI 除以 72;我的麻烦在于获取 DPI。这是我所拥有的:

def get_dpi(window):
    MM_TO_IN = 1/25.4
    pxw = window.master.winfo_screenwidth()
    inw = window.master.winfo_screenmmwidth() * MM_TO_IN
    return pxw/inw

root = Tk()
root.tk.call('tk', 'scaling', get_dpi(root)/72)
Run Code Online (Sandbox Code Playgroud)

这不起作用(在我的 4k 笔记本电脑屏幕上测试)。进一步检查,我意识到get_dpi()是返回96.0,那winfo_screenmmwidth()是返回1016!(谢天谢地,我的笔记本电脑没有超过一米宽)。

我假设 TkInter 在这里根据一些内部检测到的 DPI 计算宽度(以毫米为单位),错误地检测为 96,但我不确定它是从哪里得到的;我目前在 Linux 上,并xrdb -query返回 196 的 DPI,因此它没有从 X 服务器获取 DPI。

有谁知道一种跨平台的方式来获取我的屏幕 DPI,或者让 TkInter 能够正确获取它?或者,更重要的是:如何让 TkInter 在 HiDPI 屏幕上运行良好,并且在普通屏幕上也能正常工作?谢谢!

python tkinter dpi

6
推荐指数
3
解决办法
3390
查看次数

计算屏幕 DPI

我正在使用 Python 构建一个图像渲染应用程序,它将 numpy 数组渲染为图像。我需要一种方法来自动计算屏幕 DPI,因为我在不同的显示器(例如,2x2 英寸)上生成相同大小的图像。我在 Windows 10,Python 3.7。

不是在问如何获得显示器的屏幕尺寸——比如确定你的显示器是否为 3000x2000 像素(如解决:如何在 Python 中获得显示器分辨率?)。

相反,我想要一些专门计算 DPI 的东西,并考虑到用户应用的任何可能改变其系统 DPI 的比例设置。例如,我将比例设置为 250%。

按照专家交流(https://www.experts-exchange.com/questions/21794611/Detecting-system-DPI-settings-in-Python.html)的这个答案,我尝试使用这个:

from ctypes import windll

def get_ppi():
    LOGPIXELSX = 88
    LOGPIXELSY = 90
    user32 = windll.user32
    user32.SetProcessDPIAware()
    dc = user32.GetDC(0)   
    pix_per_inch = windll.gdi32.GetDeviceCaps(dc, LOGPIXELSX)
    print("Horizontal DPI is", windll.gdi32.GetDeviceCaps(dc, LOGPIXELSX))
    print("Vertical DPI is", windll.gdi32.GetDeviceCaps(dc, LOGPIXELSY))
    user32.ReleaseDC(0, dc)
    return pix_per_inch
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的范围,但返回的数字太低。它返回 240,而我的实际 DPI 更接近 285。

我宁愿避免为此使用像 Qt 这样的 GUI 框架,因为我想最大限度地减少开销,但如果这是唯一的方法,那么我会的!如果我必须使用框架,我更喜欢 PyQt5。

python dpi

6
推荐指数
2
解决办法
6955
查看次数

如何在matplotlib中确定屏幕尺寸

我正在寻找一种通用方法,使用 matplotlib 和任何交互式后端(例如 TkAgg、Qt4Agg 或 macosx)来获取屏幕大小(以像素为单位)。

我正在尝试编写一个函数,它可以在屏幕上的一组标准位置打开一个窗口,例如屏幕的右半部分或右上角。

我在这里编写了一个工作解决方案,复制在下面,但它需要使用 full_screen_toggle() (如此处建议的来创建一个全屏窗口来测量其大小。

我正在寻找一种方法来获取屏幕大小,而无需创建全屏窗口然后更改其大小。

import matplotlib.pyplot as plt

def move_figure(position="top-right"):
    '''
    Move and resize a window to a set of standard positions on the screen.
    Possible positions are:
    top, bottom, left, right, top-left, top-right, bottom-left, bottom-right
    '''

    mgr = plt.get_current_fig_manager()
    mgr.full_screen_toggle()  # primitive but works to get screen size
    py = mgr.canvas.height()
    px = mgr.canvas.width()

    d = 10  # width of the window border in pixels
    if position == "top": …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

5
推荐指数
1
解决办法
9155
查看次数