2016-12-02 8 views
0

私は 'ラベル'オブジェクトから作成されたテーブルを作成するために 'for'ループを使用しました。 'divider'とは別に、各ループは自身の2次元配列に追加されます(各列には13個の 'Labels'があります)。すべてのオブジェクトにそれぞれのテーブル内のインデックス位置を与えたいので、それらのポイントを参照して 'ラベル'の内容を変更することができます。2D配列内に 'tkinter'オブジェクトを設定するには?

#-------------------------------- 
    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) 
#-------------------------------- 

Aボタンは 'stock_append' 関数を呼び出し、 'entry_grid_exp' と 'entry_grid_req' 引数に渡し提出します。私は、リストを 'for'ループに置き、リスト内のすべてのアイテムを 'Label'に帰属させると、私が 'configure'関数を呼び出すことができると言った記事を読んでいますが、うまくいかないようです。さらに、このループ(機能した場合)は、特定の1つの位置ではなく、「entry_grid_exp」内のすべての項目を構成します。

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

私はこのプロジェクトを完了しようとしていると完全に失われた、と私は私がやっている見当がつかないので、絶対に任意の助けを感謝しています。

UPDATED例

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() 
+0

ボタンにコマンドをどのように割り当てていますか?つまり、Button(.....、command = _whatIsWritingHere_)です。ここで答えられている共通の間違いがあるので、私は尋ねています。 http://stackoverflow.com/questions/5767228/why-is-button-parameter-command-executed-when-declared – Lafexlos

+4

「機能していない」とはどういう意味ですか?エラーが出ますか?もしそうなら、どのようなエラー?もしそうでなければ、何が起こり、それがあなたの期待とどのように違うのですか? –

+1

FWIW、あなたのコードには、間違ってインデントされているようないくつかの行があります。しかし、それが[mcve]ではないので、私たちがあなたのコードをテストする(または変更する)のは難しいです。 BTWは 'Label'を' for Label in entry_grid_exp: 'の変数名として使うことは、Tkinterがその名前を使うことと衝突するので悪い考えです。もちろん、あなたが 'tkinter import *'から行っていなければ、その問題はありません... –

答えて

0

更新された例は優れているが、それは確かに、最小限のではありません。私たちはあなたの問題を説明するために大きなラベルのラベルを必要としません。 (私はデスクトップが1024×768ピクセルしかないので、GUIを見るのは面倒です)古いモニターがあります。また、あなたがプログラムにしたいことはまだ完全にはっきりしていません。しかし、とにかく...

entry_grid_expentry_grid_reqは両方ともリストのリストであり、内側のリストはラベルの列であるため、これらのラベルにアクセスするには適切なループ構造を使用する必要があります。

ここでは、各ラベルにその行と列番号に基づいてテキストを与えるバージョンがstock_appendです。 entry_grid_expentry_grid_reqリストはstock_lists機能に対してローカルな

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)) 

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機能を使用して、よりコンパクトなバージョンです。 stock_listsの実行が終了した後にそれらを存在させたい場合は、stock_listsというコードに戻す必要があります。

ところで、フォントの名前は "Helvetica"であり、 "Helvatica"ではありません。

関連する問題