![](/img/trans.png)
[英]Python tkinter set text widget to bottom of window using grid
[英]How can I place a widget at the very bottom of a tkinter window when positioning with .grid()?
我知道您不能在同一個 Tkinter window 中使用不同類型的幾何管理器,例如 .grid() 和 .pack()。 我有一個 window 已經使用.grid() 布局,我現在正在嘗試添加一個狀態欄,該狀態欄將被捕捉到 window 的底部。 我在網上找到的唯一方法是 use.pack(side = BOTTOM),因為 window 的 rest 使用.grid(),這將不起作用。
有沒有一種方法可以讓我在 window 的底部 select 在 using.grid() 時放置小部件?
from tkinter import *
from tkinter.ttk import *
import tkinter as tk
class sample(Frame):
def __init__(self,master=None):
Frame.__init__(self, master)
self.status = StringVar()
self.status.set("Initializing")
statusbar = Label(root,textvariable = self.status,relief = SUNKEN, anchor = W)
statusbar.pack(side = BOTTOM, fill = X)
self.parent1 = Frame()
self.parent1.pack(side = TOP)
self.createwidgets()
def createwidgets(self):
Label(self.parent1,text = "Grid 1,1").grid(row = 1, column = 1)
Label(self.parent1,text = "Grid 1,2").grid(row = 1, column = 2)
Label(self.parent1,text = "Grid 2,1").grid(row = 2, column = 1)
Label(self.parent1,text = "Grid 2,2").grid(row = 2, column = 2)
if __name__ == '__main__':
root = Tk()
app = sample(master=root)
app.mainloop()
所以使用標簽,因為我有點懶得做其他事情,你可以做框架來確保你的 window 的每個部分都可以根據需要打包/網格。 框架將是您嘗試排列小部件時使用的有用工具。 請注意,在決定您的父母時,使用 class 可以使事情變得更容易一些。 所以想象每個框架都是父母,他們的孩子可以根據需要打包。 所以我建議你畫出你想要的 GUI,看看你將如何安排它們。 此外,如果您想在一個框架內添加另一個框架,只需執行以下操作:
self.level2 = Frame(self.parent1)
您可以查看文檔中的其他設置
PS:我使用的是 class 因此自我,如果您不想使用類,那么只需將其更改為沒有 class 即可。 課程讓閱讀變得更好
只需給它一個比任何其他行都大的row
參數。 然后,給它之前的至少一行賦予權重。
更好的是使用框架來組織你的代碼。 將滾動條放在底部並在其上方放置一個框架。 然后,對框架內的所有內容使用網格。
例子:
# layout of the root window
main = tk.Frame(root)
statusbar = tk.Label(root, text="this is the statusbar", anchor="w")
statusbar.pack(side="bottom", fill="x")
main.pack(side="top", fill="both", expand=True)
# layout of the main window
for row in range(1, 10):
label = tk.Label(main, text=f"R{row}")
label.grid(row=row, sticky="nsew")
main.grid_rowconfigure(row, weight=1)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.