簡體   English   中英

為什么 tkinter 中的這個框架沒有正確居中?

[英]Why isn't this frame in tkinter centered correctly?

我希望這個輸入欄和稍后我將添加到框架中的其他內容正確居中,我收到了這個應該可以工作的代碼,但事實並非如此。

import tkinter as tk
import math
import time

root = tk.Tk()
root.geometry()
root.attributes("-fullscreen", True)

exit_button = tk.Button(root, text = "Exit", command = root.destroy)
exit_button.place(x=1506, y=0)

frame = tk.Frame(root)
main_entry = tk.Entry(root, width = 100, fg = "black")
main_entry.place(x=50, y=50)
frame.place(relx=.5,rely=.5, anchor='center')

root.mainloop()

如您所見,框架未居中,那么我該如何解決?

為了實現以全屏為中心的小部件,我不得不使用網格管理器。 下面的代碼可以工作,但確切的定位需要對框架填充進行一些擺弄。 frame padx = w/2-300 和 pady = h/2-45 是通過反復試驗找到的任意值。

    import tkinter as tk

    root = tk.Tk()
    root.attributes( '-fullscreen', True )
    w, h = root.winfo_screenwidth(), root.winfo_screenheight()

    frame = tk.Frame( root )
    main_entry = tk.Entry( frame, width = 100 )
    main_entry.grid( row = 0, column = 0, sticky = tk.NSEW )
    frame.grid( row = 0, column = 0, padx = w/2-300, pady = h/2-45,  sticky = tk.NSEW )
    exit_button = tk.Button( frame, text = 'Exit', command = root.destroy )
    exit_button.grid( row = 1, column = 0, sticky = tk.NSEW )

    tk.mainloop()

Frame會自動將大小更改為Frame內對象的大小(當您使用pack()時),但Frame內沒有任何內容。 您將所有小部件直接放在root中 - 因此Frame沒有大小(寬度為零,高度為零)並且不可見。

當我使用tk.Frame(root, bg='red', width=100, height=100) ,我會在中心看到小紅框。

你有兩個問題:

(1)您將Entry放在錯誤的父級中-它必須是frame而不是root

(2) 您使用place() ,它不會將Frame調整為其子級,並且它的大小為零 - 所以您看不到它。 您必須手動設置 Frame 的大小(即tk.Frame(..., width=100, height=100) ),或者您可以使用pack() ,它會自動調整大小。

我為背景添加了 colors 以查看小部件。 window 為blue ,框架為red

import tkinter as tk

root = tk.Tk()
root['bg'] = 'blue'

root.attributes("-fullscreen", True)

exit_button = tk.Button(root, text="Exit", command=root.destroy)
exit_button.place(x=1506, y=0)

frame = tk.Frame(root, bg='red')
frame.place(relx=.5, rely=.5, anchor='center')

main_entry = tk.Entry(frame, width=100, fg="black")
main_entry.pack(padx=50, pady=50)  # with external margins 50

root.mainloop()

在此處輸入圖像描述

暫無
暫無

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

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