2017-12-11 5 views
-1

ダイナミックボタンの世代の行と列を一度入れておくと、自動的に名前が割り当てられます。たとえば、行1(A)、列1はA1になります。 名前がtkinterのダイナミックボタンを割り当てます

from tkinter import * 
from functools import partial 
root = Tk() 

def redClick(button_num): 
    list_of_buttons[button_num].configure(bg="red") 

def buttonsMake(): 
    ctr = 0 ## button number/offset number in the list 
    for columns in range(10): 
     for rows in range(3): 
      movieSeats=Button(root, text="Empty", bg="green", fg="white", 
width=5, height=1, command=partial(redClick, ctr)) 
      movieSeats.grid(row=rows,column=columns) 
      list_of_buttons.append(movieSeats) 
      ctr += 1 

list_of_buttons=[] ## global variable 
buttonsMake() 
root.mainloop() 

私はそれが名前に各ボタンを割り当てることを期待しています。私は、グローバル変数はこれを行うことができると思うが、方法を知らない。
これは誰かが提案した別の解決策です。

seats= [["A", "a1", "a2", "a3", "a4", "a5"], 
     ["B", "b1", "b2", "b3", "b4", "b5"], 
     ["C", "c1", "c2", "c3", "c4", "c5"], 
     ["D", "d1", "d2", "d3", "d4", "d5"], 
     ["E", "e1", "e2", "e3", "e4", "e5"]] 

def make_buttons(): 
    for r, row in enumerate(seats): 
     for c, seat in enumerate(row[1:]):  # N.B. skip first element 
      btn = Button(root, text="Empty", bg="#00CC00", height=1,width=6) 
      btn.name = seat      # arbitrary attribute on Button object 
      btn.grid(row=r,column=c, padx=10, pady=10) 
+1

何が問題なの? – Nae

+0

「名前を付ける」と正確には何ですか?何を試してみましたか?あなたは単に 'テキスト'を意味しますか? – Nae

+0

名前は何ですか?変数名?辞書を使用してボタンを保持する。 – furas

答えて

2

グローバルにボタンに名前を割り当てるのは難しく、やりがいがありません。しかし、難しいことではありませんが、あなたが作るすべてのボタンの辞書を作って、 "A1"のような辞書のキーを "名前"にして、各キーの値をButton()呼び出しによって返される実際のオブジェクトになります。

ダブルネストされたforループ内に辞書を移入します。サイドノートとして

、forループの二重内、あなたが言うことができる、

import string 
: 
: 
names_d = {} 
for .... 
    for .... 
     buttonName = string.ascii_uppercase[rows] + str(columns + 1) # a working hack 
     names_d[buttonName] = Button(... 

と私は明らかに私の手にあまりにも多くの自由な時間を持っているので...

def alphanum_name(ai, ni): 
    return (ai // 26 + 1) * string.ascii_uppercase[ai % 26] + str(ni + 1) 

alphanum_name(1、2) - > 'B3'
alphanum_name(26、3) - > 'AA4'

+0

良い解決策のようです。新しいキーは生成される行と列の量に基づいて生成されるでしょうか? –

+0

上記の擬似コードを追加しました。 26行以上が必要な場合は、それを調整する必要があります。 – Gary02127

+0

ありがとう、ありがとう –

関連する問題