python - 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),部分被截断:
你们中的任何一个都知道我该如何解决这个问题吗?
解决方案
如果我需要动态调整大小,我通常会计算出屏幕的宽度和高度并相应地进行缩放。下面的代码应该会有所帮助,尽管您可能需要使用一些数字才能使其看起来正确。
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()
推荐阅读
- python - Flask SQLAlchemy 无法连接到数据库
- amazon-web-services - AWS SNS 事件在 2 秒内跳过 S3 对象的第二次更新?
- python - Google repo,拉取时运行 --depth=1
- php - WAMP 中的 Composer Init Syfony 运行时错误
- python - Python 和 uWSGI:来自迭代器的未处理对象
- javascript - 如果它们不在控制器的文件中,快递将找不到嵌套路由
- javascript - 如何在javascript中修复具有不同值类型的对象数组中的空属性值?
- javascript - 如何在 javascript 中使用异步等待捕获服务器错误?
- ruby-on-rails - VSCode、Docker、Rails 调试
- electron - 如何通过 Electron desktopCapturer 截取包括双屏在内的屏幕截图