我目前必須只使用 Tkinter 用 Python 撰寫一個國際象棋游戲才能獲得我的高中文憑,我目前正在努力解決以下問題:當一個棋子到達后線時,它可以被提升。我想創建一個帶有 Buttons 的彈出視窗,用戶可以點擊按鈕來選擇他的 pawn 應該被提升到什么樣的棋子。它目前看起來像這樣:
def getPromotePawnPiece() -> str:
optionsWindow = Toplevel()
selected_piece = "None"
pawnField = Button(optionsWindow, text="Pawn", anchor=W, command=lambda:
returnPieceSelected("Pawn", optionsWindow, selected_piece))
rookField = Button(optionsWindow, text="Rook", anchor=W, command=lambda:
returnPieceSelected("Rook", optionsWindow, selected_piece))
bishopField = Button(optionsWindow, text="Bishop", anchor=W, command=lambda:
returnPieceSelected("Bishop", optionsWindow, selected_piece))
knightField = Button(optionsWindow, text="Knight", anchor=W, command=lambda:
returnPieceSelected("Knight", optionsWindow, selected_piece))
queenField = Button(optionsWindow, text="Queen", anchor=W, command=lambda:
returnPieceSelected("Queen", optionsWindow, selected_piece))
pawnField.grid(row=1, column=0, sticky=NSEW)
rookField.grid(row=1, column=1, sticky=NSEW)
bishopField.grid(row=1, column=3, sticky=NSEW)
knightField.grid(row=1, column=2, sticky=NSEW)
queenField.grid(row=1, column=4, sticky=NSEW)
def returnPieceSelected(selected_piece_via_button: str, window: Toplevel, selected_piece_var:
str):
window.destroy()
selected_piece_var = selected_piece_via_button
視窗已成功創建,但我無法獲取有關哪個按鈕已被單擊到原始根視窗的資訊 如果有幫助:“主”視窗是全域創建的,在 Pawn 到達后呼叫 getPromotePiece()最后一行
uj5u.com熱心網友回復:
首先使用StringVarfor selected_piece,這樣就可以在里面設定了returnPieceSelected()。
然后使用optionsWindow.wait_window()insidegetPromotePawnPiece()等待選擇:
def returnPieceSelected(selected_piece_via_button: str, window: Toplevel, selected_piece_var: StringVar):
window.destroy()
# save selection
selected_piece_var.set(selected_piece_via_button)
def getPromotePawnPiece() -> str:
optionsWindow = Toplevel()
selected_piece = StringVar(value="None") # use StringVar instead of normal string
pawnField = Button(optionsWindow, text="Pawn", anchor=W, command=lambda:
returnPieceSelected("Pawn", optionsWindow, selected_piece))
rookField = Button(optionsWindow, text="Rook", anchor=W, command=lambda:
returnPieceSelected("Rook", optionsWindow, selected_piece))
bishopField = Button(optionsWindow, text="Bishop", anchor=W, command=lambda:
returnPieceSelected("Bishop", optionsWindow, selected_piece))
knightField = Button(optionsWindow, text="Knight", anchor=W, command=lambda:
returnPieceSelected("Knight", optionsWindow, selected_piece))
queenField = Button(optionsWindow, text="Queen", anchor=W, command=lambda:
returnPieceSelected("Queen", optionsWindow, selected_piece))
pawnField.grid(row=1, column=0, sticky=NSEW)
rookField.grid(row=1, column=1, sticky=NSEW)
bishopField.grid(row=1, column=3, sticky=NSEW)
knightField.grid(row=1, column=2, sticky=NSEW)
queenField.grid(row=1, column=4, sticky=NSEW)
# wait for user selection
optionsWindow.wait_window()
# return user selection
return selected_piece.get()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327494.html
