簡體   English   中英

無法使用tkinter理解包和網格的幾何形狀

[英]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 每個充當其他小部件容器的小部件都可以使用gridpack 對於具有相同母版的小部件,您不能同時使用gridpack在一起。

並非真正的答案,但我認為您會從該鏈接中獲得幫助。 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.

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