簡體   English   中英

使 Tkinter window 動態調整大小和調整 window 內容

[英]Make Tkinter window resize and adjust window contents dynamically

是否可以使 tkinter 窗口的內容適應屏幕尺寸? 就像我根據 1366x768 的屏幕分辨率制作了 window,然后我在 1024x768 分辨率的系統上運行相同的代碼並使其內容動態調整大小? 我知道我可以使用此處描述的網格結構並相應地設置單元格的權重。 但是是否可以使用包幾何結構而不是網格? 我之所以問這個問題,是因為我正在從事的項目有一半是由我的同事完成的,而他根本沒有使用網格。 因此,我沒有重做網格中的所有代碼,而是尋找解決方法。 這是我需要調整大小的示例代碼 -

def container(self):
    frame_number_panel = tk.Frame(self.parent, width=round(Dimension.SCREEN_WIDTH*0.8), height=Dimension.SCREEN_HEIGHT, bg="#eeeeee")
    frame_number_panel.pack(side="left", anchor=W)
    frame_number_panel.pack_propagate(False)
    self.main_container(frame_number_panel)
    
    # right side pannel
    frame_right_side_panel = tk.Frame(self.parent, bg="#101115", width=round(Dimension.SCREEN_WIDTH*0.2), height=Dimension.SCREEN_HEIGHT)
    frame_right_side_panel.pack(side="right", anchor=NE)
    frame_right_side_panel.pack_propagate(False)
    frame_first_row = tk.Frame(frame_right_side_panel, bg="#101115")
    frame_first_row.pack()

    winning_claim_image = PhotoImage(file=ResourcePath.resource_path('images/icon_win_claim.png'))
    label_winning_claim = tk.Label(frame_first_row, bg="#fcd116", text="WINNING\nCLAIM", image=winning_claim_image,
                                   compound="left", fg="#231f20", font=("Roboto-Bold", 10, "bold"),
                                   width=Dimension.label_winning_claim_width,
                                   height=Dimension.label_winning_claim_height)
    label_winning_claim.image = winning_claim_image
    label_winning_claim.pack(side="left", padx=Dimension.label_winning_claim_padx)

    reprint_image = PhotoImage(file=ResourcePath.resource_path('images/reprint_2.png'))
    label_reprint = tk.Label(frame_first_row, bg="#8ac539", text="REPRINT", image=reprint_image,
                             compound="left", fg="#231f20", font=("Roboto-Bold", 10, "bold"),
                             width=Dimension.label_winning_claim_width, height=Dimension.label_winning_claim_height)
    label_reprint.image = reprint_image
    label_reprint.pack(side="left", padx=Dimension.label_winning_claim_padding)

如您所見,所有小部件都是使用包幾何管理器放置的。

使用pack可以實現幾乎與使用grid相同的效果。 事實上,我通常更喜歡包裝,因為它給了我更多的自由。

例如,舉個例子:

from tkinter import Tk, Label, X, Frame, Y, LEFT, BOTH

root = Tk()

# Initialize frames
f1 = Frame(root, bg="grey")
f2 = Frame(root, bg="pink")

# Initialize labels
w1 = Label(f1, text="Red", bg="red", fg="white")
w2 = Label(f1, text="Green", bg="green", fg="white")
w3 = Label(f1, text="Blue", bg="blue", fg="white")
w1b = Label(f2, text="Red", bg="red", fg="white")
w2b = Label(f2, text="Green", bg="green", fg="white")
w3b = Label(f2, text="Blue", bg="blue", fg="white")

# Packing level 1
f1.pack(fill=X)
f2.pack(fill=BOTH, expand=True)

# Packing level 2
w1.pack(fill=X)
w2.pack(fill=X)
w3.pack(fill=X)
w1b.pack(side=LEFT, fill=BOTH, expand=True)
w2b.pack(side=LEFT, fill=BOTH, expand=True)
w3b.pack(side=LEFT, fill=BOTH, expand=True)

root.mainloop()

在此處輸入圖像描述

如您所見,通過以正確的方式使用參數fillexpand ,我已將第二幀設置為可擴展,兩側( XY )都使用 windows,而第一幀只能在X中擴展。 框架內的所有標簽也是均勻分布的。

請參閱文檔中的所有pack選項: https://effbot.org/tkinterbook/pack.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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