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

标签 python pysimplegui

大家好,

我一直致力于使用 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/

相关文章:

python - 在 Django 中获取无效图像错误,但已安装 PIL 并通过所有测试

python - 有没有一种方法可以在机器人框架中的一个关键字中一起传递嵌入式参数和普通参数?

python - 如何提取所有以 .000 结尾的值并打印它们?

Python 访问受 PKI/SSL 保护的 Web 服务

python - 在 PySimpleGUI 中制作一个文本框

python - 如何在 PySimpleGUI 中使用嵌套事件

python - 朱皮特 : Seaborn pairplot difficult to set graph dimensions for?

python - PySimpleGui 右对齐框架中的按钮

python - 如何在 PySimpleGUI 中清除窗口

python - 如何让 PySimpleGui 读取我的输入并更新我的窗口?