【问题标题】:Pyautogui changing my window size when I import itPyautogui 在我导入时更改我的窗口大小
【发布时间】:2021-12-11 03:52:51
【问题描述】:

当我在我的 gui 代码中将 pyautogui 作为 pag 导入时,窗口大小会发生变化。当我使用两个具有不同分辨率的不同显示器时,这成为一个问题。我想知道是否有办法禁止 pyautogui 进行任何形式的调整大小?下面的示例仅在我未连接第二台显示器时启动它时才有效,因此我只使用分辨率为 1920 x 1200 的笔记本电脑显示器。第二台显示器具有更高的分辨率,即使在我将 tkinter 窗口拖到笔记本电脑显示器上,仍然没有问题。这个问题似乎只在我没有连接第二台显示器的情况下启动程序时发生。示例中的按钮旨在显示导入 pyautogui 时窗口的变化情况。

from tkinter import *


win = Tk()
win.geometry("1270x725+0+0")
win.minsize(width=1270, height=600)
win.maxsize(width=1270, height=600)


def test():
    import pyautogui as pad


button = Button(win, command=test)
button.place(relx=.5, rely=.5)


win.mainloop()

【问题讨论】:

    标签: python tkinter pyautogui


    【解决方案1】:

    这是一个复杂的问题。我假设您在 Windows 上运行,因为我认为该问题不会出现在其他任何地方。

    这里的问题与高 DPI 显示器有关。 Windows 知道大多数人不喜欢在高 DPI 显示器上阅读极小的像素和极小的字体,因此它向应用程序提供了实际点分辨率的信息。在大多数情况下,这会产生最好的结果,但有些应用程序想知道确切的 DPI,以便他们可以采取自己的适当措施。 Windows 将此称为“高 DPI 感知应用程序”。

    在 Windows 上,pyautogui 所做的第一件事是调用 SetProcessDPIAware() API,它告诉 Windows 您不想要任何重新映射。这会改变您在高 DPI 显示器上获得的像素坐标的含义。

    我可以看到两个实用的解决方法。一,您可以在 pyautogui 模块中调整 _pyautogui_win.py 以删除该调用。这将对 pyautogui 的内部产生一些影响,但不清楚是什么。第二,您可以在自己的代码中尽早调用SetProcessDPIAware()。这将使您有责任决定如何处理存在于不同分辨率显示器上的窗口。

    【讨论】:

    • 哇,这信息量很大。我会尝试这两个选项,看看哪个最适合我的情况,谢谢。
    • 有趣的是,我正打算用“这没有任何意义,因为 pyautogui 不了解 tkinter”来评论您的原始问题,但在我这样做之前我决定检查源代码。 “啊哈”时刻。
    • 最后我决定使用 pynput 而不是 pyautogui,因为该库在使用时似乎不会与 DPI 混淆。
    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2022-07-08
    • 2019-10-24
    • 1970-01-01
    • 2015-04-11
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多