簡體   English   中英

Tkinter 網格:將當前行上的新列用於新小部件

[英]Tkinter grid: Use new column on current row for new widget

我使用 Tkinter 在 Python3 中編寫一個 GUI,並使用.grid()放置小部件。 我如何告訴 Tkinter 將新小部件放置在與最后放置的小部件相同的行上,但放在新的指定列上。 問題是 Tkinter 當我沒有指定行並且我不想硬編碼行號或使用行計數器污染我的代碼時會自動使用下一行0。

我嘗試了什么:

#!/usr/bin/env python3
from tkinter import *
root=Tk()
Label(root, text="Label 0").grid(column=0)
Label(root, text="Label 1").grid(column=1)
Label(root, text="Label 2").grid(column=0)
Label(root, text="Label 3").grid(column=1)
Label(root, text="Label 4").grid(column=0)
Label(root, text="Label 5").grid(column=1)
root.mainloop()

布局的樣子

Label 0
        Label 1
Label 2
        Label 3
Label 3
        Label 5

布局應該是什么樣子

Label 0 Label 1
Label 2 Label 3
Label 3 Label 5

我不想要什么

通過指定列號可以實現正確的布局,如下所示:

#!/usr/bin/env python3
from tkinter import *
root=Tk()
Label(root, text="Label 0").grid(column=0,row=0)
Label(root, text="Label 1").grid(column=1,row=0)
Label(root, text="Label 2").grid(column=0,row=1)
Label(root, text="Label 3").grid(column=1,row=1)
Label(root, text="Label 4").grid(column=0,row=2)
Label(root, text="Label 5").grid(column=1,row=2)
root.mainloop()

但這並不靈活,在第二行插入一些東西意味着必須更改所有后續行的代碼。 添加行計數器是可能的,但這很容易出錯,因為很容易忘記增加計數器。 有沒有辦法在與最后插入的小部件相同的行的第二列上插入一個新的小部件,而無需硬編碼或跟蹤最后一個行號?

或者是否有一個 function 返回最后插入的小部件的行? 所以我可以這樣做:

#!/usr/bin/env python3
from tkinter import *
root=Tk()
Label(root, text="Label 0").grid(column=0)
Label(root, text="Label 1").grid(column=1,row=<root.unknowFunctionToGetTheLastInsertedRow>)
Label(root, text="Label 2").grid(column=0)
Label(root, text="Label 3").grid(column=1,row=<root.unknowFunctionToGetTheLastInsertedRow>)
Label(root, text="Label 4").grid(column=0)
Label(root, text="Label 5").grid(column=1,row=<root.unknowFunctionToGetTheLastInsertedRow>)
root.mainloop() 

我查看了底層 Tk grid命令的文檔,它比提供的Python包裝器使用起來要方便得多,因為您可以一次在多個小部件上調用它(在這種情況下,它們在新行)。 您幾乎不需要提供明確的行號或列號。 這是 Python 中如何使用這種樣式的grid的示例:

from tkinter import *
root=Tk()
root.tk.call('grid',
    Label(root, text="Label 0"),
    Label(root, text="Label 1")
)
root.tk.call('grid',
    Label(root, text="Label 2"),
    Label(root, text="Label 3")
)
root.tk.call('grid',
    Label(root, text="Label 4"),
    Label(root, text="Label 5")
)
root.mainloop() 

在此處輸入圖像描述

以這種方式使用時,您可以傳遞給grid的其他選項: "x"將網格單元留空, "-"將小部件的列跨度增加到左側, "^"用於增加上面小部件的行跨度。

暫無
暫無

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

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