运行 pythonw.exe 时影响 Python 脚本 tkinter 分辨率和屏幕截图大小

Posted

技术标签:

【中文标题】运行 pythonw.exe 时影响 Python 脚本 tkinter 分辨率和屏幕截图大小【英文标题】:Python script tkinter resolution and screenshot size effected when running pythonw.exe 【发布时间】:2017-05-29 17:45:23 【问题描述】:

我目前有一个 python 脚本,它启动一个 tkinter GUI 实例,点击一个按钮会截取屏幕截图。

当我在 python.exe 下运行此脚本时,tkinter 分辨率很好,并且屏幕截图捕获了整个屏幕。但是,当使用 pythonw.exe 时,tkinter 窗口分辨率会发生变化(例如按钮变大),并且屏幕截图仅捕获屏幕的一部分 - 通常是左上角。

我需要使用 pythonw.exe 来防止控制台窗口出现。

有谁知道为什么 tkinter 窗口分辨率和屏幕截图会受到影响?据推测,对分辨率的影响是屏幕截图捕获量也减少的原因。

我对 Python 相当陌生,因此非常感谢您提供任何帮助,以下是 tkinter 窗口和屏幕截图功能的代码的 sn-p。重申一下这个功能在 python.exe 下运行得很好。

使用 ImageGrab 的截图功能:

    callback1():
         ImageGrab.grab_to_file('test.png')

tkinter 窗口:

    master = Tk()  
    master.wm_attributes("-topmost", 1)
    master.title("Report")
    master.configure(background='white')
    master.iconbitmap(default='icon.ico')
    master.resizable(0, 0)
    frame1 = Frame(master, bg='white')
    frame1.pack(side=BOTTOM, fill=X)
    button1 = Button(frame1, compound=BOTTOM, width=307, height=82,
    image=photo1, bg='white', command=callback1)
    button1.pack(side=TOP, padx=2, pady=8)

【问题讨论】:

【参考方案1】:

我现在已经解决了这个问题。它似乎与 Windows 中 pythonw.exe 的兼容性设置有关。更改以下内容可修复图像捕获,以及 tkinter 窗口分辨率:

转到你的 python 目录(我是c:/python27/) 右击python.exe并选择属性 选择兼容性标签 按下“更改所有用户的设置”按钮 选中“在高 DPI 设置下禁用显示缩放”框

这篇文章的功劳:

Python Imaging Library fails to grab whole screen

希望这可以帮助遇到同样问题的人。它确实提出了如何自动完成此操作的问题,因为对于 python 应用程序的用户来说,他们必须更改这些设置对用户来说并不友好。

【讨论】:

以上是关于运行 pythonw.exe 时影响 Python 脚本 tkinter 分辨率和屏幕截图大小的主要内容,如果未能解决你的问题,请参考以下文章

python的文件格式有两种,"*.py"和"*.pyw",它们有啥不同?

pythonw.exe不能用

python中.py和.pyw文件的区别

Python2/3共存,pip2/3共存

解决python多版本共存问题

python安装与环境配置