![](/img/trans.png)
[英]How to set my widgets' size and padding dynamically to fit window in Tkinter?
[英]How to set my widgets' size dynamically to fit window in Tkinter?
我的桌面分辨率是 1920x1080,我正在為相同的環境進行開發,1440x900 或更小(這取決於用戶的屏幕分辨率)當我使用 1920x1080 分辨率時,所有小部件都可見,但是當分辨率改變時,一些小部件不可見. 但是我使用了網格方法。 該怎么辦?
這是一個示例代碼:
from tkinter import *
import tkinter as tk
root = Tk()
width=1440
height=900
root.geometry('%dx%d+0+0' % (width,height))
print(width, height)
frame1=LabelFrame(root, text="frame1")
frame2=LabelFrame(root, text="frame2")
frame1.pack(fill="both", expand="yes", padx=20, pady=10)
frame2.pack(fill="both", expand="no", padx=20, pady=10)
abc=StringVar()
Label(frame2, text="A").grid(row=1, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=1, padx=5, pady=3,sticky="nsew")
Label(frame2, text="B").grid(row=1, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=3, padx=5, pady=3,sticky="nsew")
Label(frame2, text="C").grid(row=1, column=4, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=5, padx=5, pady=3,sticky="nsew")
Label(frame2, text="D").grid(row=1, column=6, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=7, padx=5, pady=3,sticky="nsew")
Label(frame2, text="E").grid(row=2, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=1, padx=5, pady=3,sticky="nsew")
Label(frame2, text="F").grid(row=2, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=3, padx=5, pady=3,sticky="nsew")
Label(frame2, text="G").grid(row=2, column=4, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=5, padx=5, pady=3,sticky="nsew")
Label(frame2, text="H").grid(row=2, column=6, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=7, padx=5, pady=3,sticky="nsew")
Label(frame2, text="I").grid(row=4, column=0, padx=5, pady=3)
bla=Text(frame2, width=220, height=2.5, font=("Calibri", 14))
bla.grid(row=4, column=1, columnspan=11, padx=5, pady=3, sticky="nsew")
Label(frame2, text="J").grid(row=3, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=3, column=1, padx=5, pady=3,sticky="nsew")
Label(frame2, text="K").grid(row=3, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=3, column=3, padx=5, pady=3,sticky="nsew")
Label(frame2, text="L").grid(row=5, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=1, padx=5, pady=3,sticky="nsew")
Label(frame2, text="M").grid(row=5, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=3, columnspan=2, padx=5, pady=3,sticky="nsew")
Label(frame2, text="N").grid(row=5, column=5, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=6, padx=5, pady=3,sticky="nsew")
Label(frame2, text="O").grid(row=5, column=7, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=8,columnspan=3, padx=5, pady=3,sticky="nsew")
root.mainloop()
感謝你
問題是您明確將文本小部件寬度設置為 220 個字符。 根據字體的不同,這可能會使小部件的寬度超過 1440 像素。 在我的機器上,小部件最終是 1988 像素。 正因為如此,它會強制列比 window 更寬。
在這種特定情況下,簡單的解決方案似乎是不明確設置文本小部件的大小。 讓它保持自然大小,讓幾何管理器使其擴展以填充 window。 如果您確實需要 220 個字符寬,則需要將字體變小,以使其符合 window 的約束。
作為一般的經驗法則,您應該將小部件的大小設置為所需的最小大小,並讓幾何管理器控制使它們足夠大以填充任何額外的空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.