gpt4 book ai didi

python - Tkinter 窗口在辅助显示屏上的缩放状态下未填满屏幕

转载 作者:行者123 更新时间:2023-11-30 22:35:39 26 4
gpt4 key购买 nike

我正在 Windows (10) 上构建一个小型 python 3 tkinter 程序。我正在从主窗口(根)创建一个辅助窗口(wdowViewer)。我希望它在我的辅助显示器上全屏(缩放)。下面的代码适用于我的主要设置,有两个相同的屏幕。但是,如果我将笔记本电脑从扩展坞中取出并将其连接到(任何)外部显示器,则新窗口仅填充辅助显示器的大约 2/3。

有两点需要注意:- 笔记本电脑和外接显示器具有相同的分辨率。- 当 overrideredirect 设置为 0 时,窗口会适当缩放。

mon_primary_width = str(app.root.winfo_screenwidth()) # width of primary screen

self.wdowViewer = Toplevel(app.root) # create new window
self.wdowViewer.geometry('10x10+' + mon_primary_width + '+0') # move it to the secondary screen
self.wdowViewer.wm_state('zoomed') # full screen
self.wdowViewer.overrideredirect(1) # remove tool bar
app.root.update_idletasks() # Apply changes

最佳答案

经过两天的实验,我终于找到了解决办法。

考虑以下示例:使用以下代码时,使顶层缩放可以在任何辅助显示器上正常工作:

from tkinter import *    

# Make tkinter window
root = Tk()
sw = str(root.winfo_screenwidth())
Label(root, text="Hello Main Display").pack()

# Make a new toplevel
w = Toplevel(root)
w.geometry("0x0+" + sw + "+0")
w.state('zoomed')
w.overrideredirect(1)
Label(w, text='Hello Secondary Display').pack()

root.mainloop()

但是,在我的代码中,我在运行 mainloop 命令后创建了一个新的顶级。那么,问题就出现了。有问题的代码示例:

from tkinter import *

# New Tkinter
root = Tk()
sw = str(root.winfo_screenwidth())

# Function for new toplevel
def new_wdow():
w = Toplevel(root)
w.geometry("0x0+" + sw + "+0")
w.state('zoomed')
w.overrideredirect(1)
Label(w, text='Hello Secondary Display').pack()

# Make button in main window
Button(root, text="Hello", command=new_wdow).pack()

root.mainloop()

问题:仅当 Windows 中的 DPI 缩放未设置为 100% 时,才会出现该错误。因此,tkinter 在运行主循环之后处理 DPI 缩放的方式似乎存在错误。它无法正确缩放窗口,但 Windows 将其视为正确缩放。

修复:告诉 Windows 应用程序会自行处理 DPI 缩放,并且不会调整窗口大小。这可以使用 ctypes 来实现。将以下代码放入 python 脚本的早期部分:

import ctypes
ctypes.windll.shcore.SetProcessDpiAwareness(2)

希望其他人会发现该解决方案有帮助。希望有人可以解释更多这里发生的事情!

关于python - Tkinter 窗口在辅助显示屏上的缩放状态下未填满屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44484423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com