我正在为学校编写带有GUI的程序。
我应该写Pah Tum。它在7x7矩阵上播放。我的控制台游戏已经完成并完美运行,但我现在正在与Tkinter进行斗争。
到目前为止,我在__init__
函数中定义的帧内部有几帧。
所以现在是第一个问题:
我可以制作这样的7x7电路板:
for x in range(0, 7):
for y in range(0, 7):
self.button = Button(self.board, command=self.action)
self.button.grid(row = x, column = y)
所以我现在要做的是,每当我按下一个按钮时,我想将颜色改为红色(对于玩家1)或蓝色(如果玩家2转过来)。
self.turn_tracker = 0 # is in __init__
def action(self):
if self.turn_tracker in range(0, 49, 2):
self.turn_tracker += 1
self.button.configure(bg="blue")
elif self.turn_tracker in range(1, 49, 2):
self.turn_tracker += 1
self.button.configure(bg="red")
elif self.turn_tracker == 49:
print("game over")
sys.exit() #calculate
这只会在6x6时更改按钮。 所以我尝试的是分别定义每个按钮,并分别对每个按钮进行更改。你可以想象这看起来真的很丑,但至少可以起作用。
我可以做些什么来提高效率?谢谢你的帮助!
答案 0 :(得分:0)
您仍然可以在循环中定义按钮并将不同的命令关联到它们。例如,您可以将按钮存储在7x7矩阵self.buttons
中,并使action
将行和列作为参数:
def action(self, x, y):
if self.turn_tracker in range(0, 49, 2):
self.turn_tracker += 1
self.buttons[x][y].configure(bg="blue")
elif self.turn_tracker in range(1, 49, 2):
self.turn_tracker += 1
self.buttons[x][y].configure(bg="red")
elif self.turn_tracker == 49:
print("game over")
按钮矩阵在__init__
和
self.buttons = []
for x in range(0, 7):
self.buttons.append([])
for y in range(0, 7):
button = tk.Button(self.board, command=lambda row=x, column=y: self.action(row, column))
self.buttons[x].append(button)
button.grid(row=x, column=y)
我使用lambda row=x, column=y: self.action(row, column)
而非直接lambda: self.action(x, y)
,因为在循环x=6
和y=6
的末尾,所以当我点击按钮时,它将会是最后一个按钮的颜色会改变(见Tkinter assign button command in loop with lambda)。