【发布时间】:2016-02-16 18:37:32
【问题描述】:
好的,我的代码有问题,我知道我正在尝试做的动作有效,但我不知道让你在哪种情况下选择哪个动作。
这是我的一个按钮的示例,总共有 25 个
self.B00 = Button(frame)
self.B00.bind("<ButtonRelease-1>", self.clicked)
self.B00.grid(row=0, column=0)
self.B00.config(height=8, width=16)
***** 这是我的按钮单击移动定义 ***** 这是我觉得我遇到问题的地方。您单击 B00 然后应该能够单击 B04 并在 B04 中放置一个 X 并将该行向左移动。发生的事情是,当我单击 B04 时,它正在启动该按钮上的 if 语句,而不是完成原始 if 语句。所以什么也没有发生。我该如何解决这个问题。
def clicked(self, event):
if event.widget == self.B00:
print("You can select B04 or B40")
if event.widget == self.B04:
self.userMoveLeft(4)
elif event.widget == self.B40:
self.userMoveUp(20)
if event.widget == self.B04:
if event.widget == self.B00:
self.userMoveRight(0)
elif event.widget == self.B44:
self.userMoveUp(24)
这是我的实际左移定义
def userMoveLeft(self, pos):
# Is this a valid move?
if self.board[pos] == " " or self.board[pos] == "X" or self.board[pos] == "O":
# Record the players move...]
self.board[pos - 4] = self.board[pos - 3]
self.board[pos - 3] = self.board[pos - 2]
self.board[pos - 2] = self.board[pos - 1]
self.board[pos - 1] = self.board[pos]
self.board[pos] = "X"
# Then redraw the board!
self.redrawBoard()
所以应该发生的是当用户单击按钮 B00 他应该可以选择单击 B04 或 B40,我觉得正在发生的事情是如果您单击 B00 然后单击 B04 它正在停止我的 if 语句并移动到 if 语句在按钮 B04 上并重新开始 if 语句,而不是像应有的那样将 X 放在 B04 上。
如果你玩过,这将是一款 QUIXO 游戏。
我确实知道,如果我在我调用 self.userMoveLeft 或任何移动本身起作用的地方取出 If 语句,那么我的问题在于标有 ***** 的中间定义
我只是想补充一下,我是编程新手,如果我不完全理解,请见谅
我还认为,在用户制作第二个选择棋盘时能够按住按钮会很好。似乎您应该能够将 event.widget == self.B00 设为 Depressed 按钮,直到您选择 self.B04 进行移动,然后 B00 不再被按住。
所有这些都是使用 Python 使用 tkinter 模块完成的
感谢您的帮助。
编辑
我想知道是否有类似的东西 def点击(自我,事件,事件2): 如果 event.widget == self.B00: print("您可以选择 B04 或 B40") 如果 event2.widget == self.B04: self.userMoveLeft(4) elif event2.widget == self.B40: self.userMoveUp(20)
【问题讨论】:
标签: python button tkinter click self