簡體   English   中英

如何動態設置我的小部件的大小以適應 Tkinter 中的 window?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM