gpt4 book ai didi

python - 有没有办法在点击它后更新 PySimpleGUI 中的网格

转载 作者:行者123 更新时间:2023-12-04 13:38:33 27 4
gpt4 key购买 nike

大家好,

我一直致力于使用 PySimpleGUI 为我的 Tic Tac Toe 游戏创建 GUI。我的代码如下:

import PySimpleGUI as sg
import random

board_layout1 = {(2,0):" ", (2,1):" ", (2,2): " ", (1,0): " ", (1,1): " ", (1,2): " ", (0,0): " ", (0,1): " ", (0,2): " "}

电路板布局基于:

Diagram

然后我创建了一个界面来接收用户输入(即名称和选择 X 或 O 符号)。
layout = [      
[sg.Text("Please enter your Name and your opponent's name")],
[sg.Text('Name', size=(15, 1)), sg.InputText('')],
[sg.Text('Name of opponent', size=(15, 1)), sg.InputText('')],
[sg.Frame(layout=[
[sg.Radio('X', "RADIO1", default=True, size=(10,1)), sg.Radio('O', "RADIO1")]], title='Options',title_color='red', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')],
[sg.Submit(), sg.Cancel()]
]

window = sg.Window('Tic Tac Toe Game').Layout(layout)
button, events = window.Read()
print(events)
window.close()


player1, player2, player1_event, player2_event = events[0], events[1], events[2], events[3]

player1 和 player2 将返回他们的名字。 Player1_event 和 player2_event 将返回 True 或 False。当我使用复选框时,事件 2如果我检查它,则为 True,而 events[3] 为 False。

然后我分别分配标记。
if player1_event == True:
player1_marker, player2_marker = ("X", "O")
else:
player1_marker, player2_marker = ("O", "X")

现在,我将为电路板创建 GUI。
def board_gui():    
max_row = max_col = 3

layout = [[sg.Button(' ', size=(8, 4), key=(i,j), pad=(0,0)) for j in range(max_col)] for i in range(max_col)]

window = sg.Window('Tictactoe', layout)
button, events = window.Read()
return button
window.close()

接下来(问题出在哪里),我创建了相应地更新板的函数。所以让我们假设如果 play1 先开始,他决定选择“X”作为他的标记。他选择了第一个网格并点击它。它标记“X”。所以下一次点击应该属于play2,它的标记是'O'。我的代码似乎在更新第二次点击的标记时出现问题。

我做了什么:
def board_gui_update(marker):   
max_row = max_col = 3

layout = [[sg.Button(' ', size=(8, 4), key=(i,j), pad=(0,0)) for j in range(max_col)] for i in range(max_col)]
window = sg.Window('Tictactoe', layout)
while True:
button, events = window.Read()
if button in (None, 'Exit'):
break
window[button].update(marker)

window.close()

我尝试过的:
def board_gui_update(marker):   
max_row = max_col = 3
layout = [[sg.Button(' ', size=(8, 4), key=(i,j), pad=(0,0)) for j in range(max_col)] for i in range(max_col)]
window = sg.Window('Tictactoe', layout)
while True:
button, events = window.Read()
if button in (None, 'Exit'):
break
if marker == player1_marker:
turn = player1
if turn == player1:
window[button].update(player1_marker)
turn = player2
else:
window[button].update(player2_marker)
else:
if marker == player2_marker:
turn = player2
if turn == player2:
window[button].update(player2_marker)
turn = player1
else:
window[button].update(player1_marker)

window.close()

在这里似乎也不起作用。我已经查看了涉及 tkinter 的文档和解决方案,但似乎没有任何东西能够更新标记。

您可以在此 snapshot 中查看问题.

最佳答案

看看这是否符合您的要求。每次点击一个方块时,它都会变成一个新的标记。我想你是说你不能改变按钮上显示的值。该程序向您展示了如何做到这一点。

import PySimpleGUI as sg

layout = [[sg.B(' ', size=(8,4), key=(i,j)) for i in range(3)] for j in range(3)]

window = sg.Window('Tic Skeleton', layout)

while True: # Event Loop
event, values = window.read()
print(event, values)
if event in (None, 'Exit'):
break
current_marker = window[event].get_text()
window[event].update('X' if current_marker == ' ' else 'O' if current_marker == 'X' else ' ')
window.close()


enter image description here

关于python - 有没有办法在点击它后更新 PySimpleGUI 中的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60352034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com