首页 > 解决方案 > Tkinter应用中固定长度的widget的解析问题

问题描述

在我的 Tkinter 应用程序中,我使用具有固定长度和高度的图表、文本和图像。如果我在与我编写 Tkinter 应用程序的计算机具有相同屏幕分辨率的另一台计算机上运行该应用程序,则所有内容都将正确显示。

如果 Tkinter 应用程序在屏幕分辨率较低的计算机上运行,​​则图像、文本和图表会被部分截断。因此它们不再完全显示。

为了说明这一点,我创建了一个最小的示例,其中我使用了固定长度的按钮:

from tkinter import *

root = Tk()
root.attributes('-zoomed', True)          # For Linux user: maximaizes window
#root.state('zoomed')                     # For windows user use root.state('zoomed') 
                                          #instead         

Button(root, text = "Replacement for the main content ", padx = 450, pady=30).grid(row = 0, column = 0)
Button(root, text = "Replacement for an image, diagram, text", pady = 20).grid(row = 0, column = 1, padx = 5)


mainloop()

如果我使用与创建应用程序时相同的屏幕分辨率(在本例中为 1366 x 768),则所有内容都将正确显示:

在此处输入图像描述

对于较低的分辨率 (1280 x 720),部分被截断:

在此处输入图像描述

你们中的任何一个都知道我该如何解决这个问题吗?

标签: pythontkinter

解决方案


如果我需要动态调整大小,我通常会计算出屏幕的宽度和高度并相应地进行缩放。下面的代码应该会有所帮助,尽管您可能需要使用一些数字才能使其看起来正确。

from tkinter import *

root = Tk()
root.attributes('-zoomed', True)    # For Linux user: maximizes window
# root.state('zoomed')              # For windows user use root.state('zoomed')
root.update()                       # instead
width, height = root.winfo_width(), root.winfo_height()
set_width = 1366
set_height = 768

width_multiplier = width / set_width
height_multiplier = height / set_height


Button(root, text="Replacement for the main content ",
       padx=450 * width_multiplier,
       pady=30 * height_multiplier).grid(row=0, column=0)
Button(root, text="Replacement for an image, diagram, text",
       pady=20 * height_multiplier).grid(row=0, column=1,
                                         padx=5 * width_multiplier)


root.mainloop()

推荐阅读