簡體   English   中英

如何在2D陣列中配置“ tkinter”對象?

[英]How to configure 'tkinter' objects within a 2D array?

我使用了“ for”循環來創建由“ Label”對象制成的表。 除了“除法器”,每個循環都附加到自己的二維數組(每列有十三個“標簽”); 我想給每個對象各自表中的索引位置,這樣我就可以引用這些點並更改“標簽”的內容。

#--------------------------------
    entry_grid_exp=[]
    entry_grid_req=[]
#--------------------------------
    exp_list = Frame(program, bg="#dcdcdc", height=500, width=600)
    exp_list.grid(row=3, column=1)
#--------------------------------
    for i in range(1, 16):
        entry_column=[]
        for x in range(0, 13):
            entry_column.append(Label(exp_list, width=15,bg="#FFFFFF",relief=SUNKEN))
            entry_column[x].grid(row = x+6, column=i, padx=0, pady=0)
        entry_grid_exp.append(entry_column)
    Request_list = Label(exp_list, width=10, bg="#dcdcdc", fg="#000000", text="Requested list.")
    Request_list.grid(row = 20, column=1)
    for i in range(1,16):
        box3 = Label(exp_list, width=10, bg="#dcdcdc", fg="#dcdcdc", text="divider")
    box3.grid(row = 21, column=i)
    for i in range(1, 16):
        entry_column=[]
        for x in range(0, 6):
            entry_column.append(Label(exp_list, width=15,bg="#FFFFFF",relief=SUNKEN))
            entry_column[x].grid(row = x+21, column=i, padx=0, pady=0)
         entry_grid_req.append(entry_column)
#--------------------------------

提交按鈕調用函數“ stock_append”並傳遞“ entry_grid_exp”和“ entry_grid_req”參數。 我讀了一篇帖子,說將列表放入“ for”循環並將列表中的每個項目歸於“標簽”將使我能夠調用“配置”功能,但似乎不起作用。 另外,此循環(如果可行)將配置“ entry_grid_exp”中的每個項目,而不是一個特定位置。

def stock_append(entry_grid_exp, entry_grid_req):
for Label in entry_grid_exp:
    Label.configure(text="test") 

我正在嘗試完成這個項目,但完全迷路了,非常感謝任何幫助,因為我不知道自己在做什么。

更新示例

from tkinter import *
root = Tk()
Med_font = ("Helvatica", 11)
Small_font = ("Helvatica", 9)
main = Frame(root, bg="#dcdcdc", height=600, width=600)
main.grid()
s_name = StringVar()
s_category = StringVar()
s_description = StringVar()
s_quantity = StringVar()
s_risk = StringVar()
s_ID = StringVar()


def stock_append(entry_grid_exp, entry_grid_req, program):
    for item in entry_grid_exp:
        Label.configure(program, text="test")


def stock_define(entry_grid_exp, entry_grid_req, program):
    stock_frame = Frame(main, bg="#dcdcdc", height=100, width=1000)
    stock_frame.grid()

    name = Entry(stock_frame, width=15, textvariable=s_name)
    name.grid(row=1, column=1, padx=10)

    category = Entry(stock_frame, width=15, textvariable=s_category)
    category.grid(row=1, column=2, padx=10)

    description = Entry(stock_frame, width=15, textvariable=s_description)
    description.grid(row=1, column=3, padx=10)

    quantity = Entry(stock_frame, width=15, textvariable=s_quantity)
    quantity.grid(row=1, column=4, padx=10)

    risk = Entry(stock_frame, width=15, textvariable=s_risk)
    risk.grid(row=1, column=5, padx=10)

    stock_id = Entry(stock_frame, width=15, textvariable=s_ID)
    stock_id.grid(row=1, column=6, padx=10)
    submit = Button(stock_frame, width=15, text="submit", command=lambda: stock_append(entry_grid_exp, entry_grid_req,
                                                                                  program))
    submit.grid(row=1, column=7, padx=10)


def stock_lists():
    program = Frame(main, bg="#dcdcdc", height=600, width=600)
    program.grid()

    title = Label(program, text="MAIN", font=Med_font, bg="#dcdcdc")
    title.grid(row=2, column=1)

    entry_grid_exp = []
    entry_grid_req = []

    exp_list = Frame(program, bg="#dcdcdc", height=500, width=600)
    exp_list.grid(row=3, column=1)

    stock_add = Button(exp_list, bg="#bebebe", width=10, text="ADDSTCK", command=lambda: stock_define(entry_grid_exp,
                                                                                                  entry_grid_req,
                                                                                                  program))
    stock_add.grid(row=4, column=15)

    experiment_list = Label(exp_list, width=10, bg="#dcdcdc", fg="#000000", text="Experiment list.")
    experiment_list.grid(row=4, column=1)

    for i in range(1, 16):
        entry_column = []
        for x in range(0, 13):
            entry_column.append(Label(exp_list, width=15, bg="#FFFFFF", relief=SUNKEN))
            entry_column[x].grid(row=x+6, column=i, padx=0, pady=0)
        entry_grid_exp.append(entry_column)

    for i in range(1, 16):
        divider = Label(exp_list, width=10, bg="#dcdcdc", fg="#dcdcdc", text="divider")
        divider.grid(row=21, column=i)

    request_list = Label(exp_list, width=10, bg="#dcdcdc", fg="#000000", text="Requested list.")
    request_list.grid(row=20, column=1)

    for i in range(1, 16):
        entry_column = []
        for x in range(0, 6):
            entry_column.append(Label(exp_list, width=15, bg="#FFFFFF", relief=SUNKEN))
            entry_column[x].grid(row=x+21, column=i, padx=0, pady=0)
        entry_grid_req.append(entry_column)

stock_lists()
mainloop()

您更新的示例更好,但是肯定不是最少。 我們不需要那么大的標簽網格來說明您的問題。 (我有一台舊顯示器,所以我的桌面只有1024 x 768像素,這使得查看GUI變得很痛苦)。 另外,還不清楚您要讓程序執行什么操作。 但無論如何...

您的entry_grid_expentry_grid_req都是列表列表,內部列表是Label的列,因此要訪問這些Label,您需要使用適當的循環結構。

這是stock_append的一個版本,該版本根據行號和列號為每個Label提供文本。

def stock_append(entry_grid_exp, entry_grid_req, program):
    x = 0
    for col in entry_grid_exp:
        y = 0
        for item in col:
            item.configure(text="exp{}_{}".format(y, x))
            y += 1
        x += 1

    x = 0
    for col in entry_grid_req:
        y = 0
        for item in col:
            item.configure(text="req{}_{}".format(y, x))
            y += 1
        x += 1

這是一個更緊湊的版本,它使用內置的enumerate函數生成行號和列號:

def stock_append(entry_grid_exp, entry_grid_req, program):
    for x, col in enumerate(entry_grid_exp):
        for y, item in enumerate(col):
            item.configure(text="exp{}_{}".format(y, x))

    for x, col in enumerate(entry_grid_req):
        for y, item in enumerate(col):
            item.configure(text="req{}_{}".format(y, x))

entry_grid_expentry_grid_req列表是stock_lists函數的本地列表。 如果希望它們在stock_lists完成運行之后存在, stock_lists需要將它們返回到調用stock_lists的代碼中。

順便說一句,字體的名稱是“ Helvetica”,而不是“ Helvatica”。

暫無
暫無

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

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