0

ソフトウェア エンジニアリング クラスのボードゲームの GUI を構築しています。Python 2.7 (Windows) で TKinter ツールキットを使用しています。ボタンの特定の順序を無視/忘れる方法が見つからないように見えるため、現在行き詰まっています。基本的に、ゲーム ボードを表すボタンのグリッドを作成しようとしています。そして現在、7x7 グリッドに合計 49 個のボタンがあるゲーム ボードがあります。

これまでのところ、これは私ができることです:

  1. 列 = x および行 = y であるすべてのボタン オブジェクトをインスタンス化します。これにより、x*y のグリッドが簡単に作成されます
  2. 次に、各ボタンをリストに配置します (これを list1 と呼びます)
  3. ボタン オブジェクトのリストを使用して、(適切な説明がないため) 特定のボタンを無視/忘れ/削除したいと考えています。grid_forget を使用するボタン オブジェクトのインデックスの 2 番目のリスト (list2) を作成し、2 つのリストを比較して、list2 にないものだけを保持できると考えています。残念ながら、これは私が望むようには機能しません。コードは次のとおりです。

      gameboard = ttk.Labelframe(root, padding = (8,8,8,8), text = "Gameboard", 
                  relief = "sunken")
      #forgetButtons will not be displayed on the game board b/c they do not have a  
      #label (they are not a: room, hallway, starting space)
      forgetButtons = [0,1,3,5,6,7,13,14,16,18,21,30,32,41,42,43,45,46,47,48]
      #this list tracks all the buttons on the gameboard
      myButtons=[]
      count = 0
          for x in range(7): #build a 7x7 grid of buttons (49 buttons total)
              for y in range(7):
                  btn = Button(gameboard, width=7, height=4)
                  myButtons.append(btn)
                  btn.grid(column=x, row=y, padx = 3, pady = 3)
    
                  #do some comparison here between the two lists 
                  #to weed out the buttons found in forgetButtons
    
                  #**or maybe it should not be done here?**
    
                  btn.config(text="Room%d\none\ntwo\nfour\nfive" % x)
    
4

1 に答える 1

2

grid_forgetウィジェットを作成しない場合は、これらのウィジェットは必要ありません。

import itertools
import Tkinter as tk

root = tk.Tk()
forgetButtons = [0,1,3,5,6,7,13,14,16,18,21,30,32,41,42,43,45,46,47,48]
myButtons = []

for x, y in itertools.product(range(7), repeat=2):
    if not x*7 + y in forgetButtons:
        btn = tk.Button(root, width=7, height=4, text="Room%d\none\ntwo\nfour\nfive" % x)
        btn.grid(column=x, row=y, padx=3, pady=3)
        myButtons.append(btn)

root.mainloop()

位置を計算する順序はわかりませんがforgetButtons(通常、最初のインデックスは行を表し、2 番目のインデックスは列を表します)、簡単に切り替えることができます。

于 2013-07-31T01:07:31.717 に答える