2017-04-15 6 views
2

ここは私の最初の投稿です。私は乱数を使用して5x5のテーブルを作成しようとしています。目標は、ユーザーがテーブルの最小番号から最大番号までクリックするはずで、正しい番号をクリックすると無効にする必要があるということです。私は変数に各ボタンをつけたくありません。私は乱数を使ってウィンドウを作成しましたが、クリックされた数値が最小であるかどうかをチェックする関数を作成したいと思います。答えが "はい"の場合、状態をDISABLEDに変更する必要があります。私はこれに4時間以上座っていて、「テキスト」のようなクリックされたボタン情報にどうやってアクセスすればいいのかわかりません。変数に割り当てられていないボタン情報にアクセスできますか?

これまでのところ、私はこれまでdat関数に取り組んでいました。

from tkinter import * 
import random 


def click(z=None): 
    global o 
    Button(state=DISABLED) 


o=Tk() 
y=0 
listrow=[4,3,2,1,0] 
numbers=[] 
spr=IntVar() 

while len(numbers) < 25: 
    r = random.randint(0,999) 
    if r not in numbers: 
     numbers.append(r) 

for i in range(1,26): 
    Button(o, text=str(numbers[i-1]), width=10).grid(row=listrow[i%5], column=y) 
    if i == 5: 
     y+=1 
    elif i == 10: 
     y+=1 
    elif i==15: 
     y+=1 
    elif i==20: 
     y+=1 
    else: 
     continue 

o.bind_all('<Button-1>', click) 


o.mainloop() 
+1

4つの方法、あなたはボタンにあなたが行うことになっているもののような変数を割り当てる、またはあなたが作ったIntVarを使用しますか。または、すべてのボタンをリストに保存するか、サブクラスButtonを作成して独自のメソッドを追加します。 – abccd

+0

各ボタンには「テキスト」値が割り当てられています。関数で何を入力すればよいのですか?ユーザーがそのボタンをクリックすると、この "テキスト"値を使用できます。変数にボタンが添付されていないとcgetが動作しないようです。 –

+0

テキスト属性は、どのボタンが押されたかを知っている場合にのみ使用できますが、現在は使用しません。 – abccd

答えて

0

ビルドコントロールとボタンクリックイベント用に定義されたモジュールでクラスオブジェクトを統合することを検討してください。具体的には、各ボタン上で、数字リストの最小値をチェックし、インデックス整数をパラメータとして渡すことによって対応するボタン項目を無効にする。以下の調整を参照してください。ボタンコマンドの呼び出しで巧妙なlambda solutionlambda i=iため@BrenBarnへ

クレジット:

from tkinter import * 
import random 

class NUMapp():   
    def __init__(self): 
     self.root = Tk() 
     self.buildControls() 
     self.root.mainloop() 

    def buildControls(self): 
     self.root.wm_title("Random Number Picker") 
     x = 0; y = 0 
     self.numbers = []; self.numbtn = [] 

     while len(self.numbers) < 25: 
      r = random.randint(0,999) 
      if r not in self.numbers: 
       self.numbers.append(r) 

     for i in range(1,26): 
      self.numbtn.append(Button(self.root, text=str(self.numbers[i-1]), width=10, 
           command=lambda i=i:self.btnclick(i-1))) 
      self.numbtn[i-1].grid(row=x, column=y)  
      x+=1  
      if i % 5 == 0: 
       x = 0 
       y += 1 

    def btnclick(self, mynum): 
     currnum = int(self.numbtn[mynum].cget('text'))  # CAPTURE BUTTON TEXT 
     if currnum == min(self.numbers):    
      self.numbtn[mynum].config(state="disabled") # DISABLE BUTTON 
      self.numbers.remove(currnum)     # REMOVE FOR NEW MINIMUM 

NUMapp() 
+0

ありがとう! –

+0

素晴らしい!答えが助けられた場合は、解決を確認するために受け入れてください(横にチェックマークを付けてください)。 – Parfait

関連する問題