[英]Can't understand pack and grid geometry with tkinter
嗨,我不太了解furas如何使以下代碼起作用。 當他添加一個盒子時,為什么他沒有收到關於網格和打包的錯誤消息? 在addbox函數中,他將框架設置為已經打包的根,甚至使用函數內部的pack,然后使用網格。
有人可以向我解釋一下這種“魔術”是如何工作的嗎?
他的答案的鏈接: 用Tkinter按鈕創建新的輸入框
from Tkinter import *
#------------------------------------
def addBox():
print "ADD"
frame = Frame(root)
frame.pack()
Label(frame, text='From').grid(row=0, column=0)
ent1 = Entry(frame)
ent1.grid(row=1, column=0)
Label(frame, text='To').grid(row=0, column=1)
ent2 = Entry(frame)
ent2.grid(row=1, column=1)
all_entries.append( (ent1, ent2) )
#------------------------------------
def showEntries():
for number, (ent1, ent2) in enumerate(all_entries):
print number, ent1.get(), ent2.get()
#------------------------------------
all_entries = []
root = Tk()
showButton = Button(root, text='Show all text', command=showEntries)
showButton.pack()
謝謝
沒有魔術,只是按設計工作。 該代碼在根窗口中使用pack
,並在框架內使用grid
。 每個充當其他小部件容器的小部件都可以使用grid
或pack
。 對於具有相同母版的小部件,您不能同時使用grid
和pack
在一起。
並非真正的答案,但我認為您會從該鏈接中獲得幫助。 tkinter及其布局確實有點難以理解。 直到我迷失了本演示文稿,直到我終於可以理解它的方式解釋了布局細節之后,我才知道如何處理它。
只要把它放在那里,其他人也可以找到。 bezley的tkinter教程
我認為您錯過了實際的包裝和網格。 考慮這樣的代碼:
import tkinter as tk
root = tk.Tk()
myFrame = tk.Frame(root)
myFrame.pack()
myButton1 = tk.Button(myFrame, text='This is button 1')
myButton2 = tk.Button(myFrame, text='This is button 2')
myButton1.grid(row=0, column=0)
myButton2.grid(row=1, column=0)
root.mainloop()
通過創建root
我們創建了一個新窗口。 在此窗口中,我們將放置其他所有內容。 然后我們創建myFrame
。 注意,實際的“事物”(用更恰當的術語-小部件)是在myFrame = tk.Frame(root)
行中創建的。 注意,我們必須指定要將此小部件放在方括號中的位置,並且我們已經寫好它將成為根目錄-我們的主窗口。 空白框可能不是最好的示例,因為您看不到它的放置位置(除非您至少使用了更多規格,否則不會),但仍然如此。 我們已經創建了它,但是沒有將其放置在用戶界面中。 我們使用.pack()
放置它。 現在,您將小部件稱為包或網格。 但這不是事實。 Pack和grid只是一組規則,在其上將小部件放置在某種類型的窗口中。 因此,如果要在本例中向root
添加更多內容,則必須再次使用.pack()
。 為什么? 如果您針對如何在計算機屏幕上放置東西給出兩套規則-它們很可能會相互沖突。 但是,如果我們再下一層,現在想在myFrame
放置一些東西,我們可以再次選擇要使用的規則集。 這是因為沒有關系,我們的frame
將在root
內結束,我們現在只想指定按鈕1和2在框架內的結束位置。 因此,我們可以再次使用.pack()
或切換到.grid()
。
得出以下結論: .pack()
.grid()
和.place()
是關於如何將小部件放置在其他小部件內的規則集。 概括地說,這些是關於如何將框放置在其他框中的規則。 我們在其中布置其他盒子的一個盒子只能有一組規則。
希望這個例子對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.