Python 更新不更改PySimpleGUI中的可见性

Python 更新不更改PySimpleGUI中的可见性,python,pysimplegui,Python,Pysimplegui,我试图使用visible=False使GUI元素不可见。除了visible属性外,update函数似乎还适用于其他所有属性以及下面代码中显示的值。具体来说,尽管程序要求元素(2,2)变为不可见,但元素(4,2)变为不可见。在此方面的任何帮助都将不胜感激。谢谢 import PySimpleGUI as sg layout = [[sg.B(' ', size=(8,4), key=(i,j)) for i in range(0,5)] for j in range(0,4)] window

我试图使用visible=False使GUI元素不可见。除了visible属性外,update函数似乎还适用于其他所有属性以及下面代码中显示的值。具体来说,尽管程序要求元素(2,2)变为不可见,但元素(4,2)变为不可见。在此方面的任何帮助都将不胜感激。谢谢

import PySimpleGUI as sg

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

window = sg.Window('Trying to change attribute', layout).Finalize()
window.Maximize()

while True:             # Event Loop
    event, values = window.read()
    print(event, values)
    window[(1,1)].update(button_color=('blue','yellow'))
    window[(2,2)].update(visible=False)  ## Problem here
    window[(3,3)].update('Hello')

    if event in (None, 'Exit'):
        break
    current_marker = window[event].get_text()


代码工作正常

当您单击任何按钮时。它更新
visible=False
,并从屏幕上删除。所以按钮(3,2)和(4,2)向左移动。因此,我们认为(4,2)是不可见的,而不是(2,2)

您也可以使用禁用按钮进行检查

window[(2,2)].update(disabled=True)

代码工作正常

当您单击任何按钮时。它更新
visible=False
,并从屏幕上删除。所以按钮(3,2)和(4,2)向左移动。因此,我们认为(4,2)是不可见的,而不是(2,2)

您也可以使用禁用按钮进行检查

window[(2,2)].update(disabled=True)

您所经历的行为是由于不可见的元素在布局中的位置松动所致。换句话说,元素(2,2)消失了。如果稍后使其可见,它将显示在相应行的末尾

在大多数情况下,这不是我们想要的行为。您可以通过使用如下所示的
place()
之类的函数为元素保留一个位置来防止它:

import PySimpleGUI as sg


def place(elem, size=(None, None)):
    return sg.Column([[elem]], size=size, pad=(0, 0), element_justification='center')


def test():
    layout = [[place(sg.B(' ', size=(8, 4), key=(i, j))) for i in range(0, 5)] for j in range(0, 4)]

    window = sg.Window('Trying to change attribute', layout).Finalize()
    window.Maximize()

    while True:  # Event Loop
        event, values = window.read()
        if event in (None, 'Exit'):
            break
        print(event, values)
        window[(1, 1)].update(button_color=('blue', 'yellow'))
        window[(2, 2)].update(visible=False)
        window[(3, 3)].update('Hello')
结果是:


您所经历的行为是由于不可见的元素在布局中的位置松动所致。换句话说,元素(2,2)消失了。如果稍后使其可见,它将显示在相应行的末尾

在大多数情况下,这不是我们想要的行为。您可以通过使用如下所示的
place()
之类的函数为元素保留一个位置来防止它:

import PySimpleGUI as sg


def place(elem, size=(None, None)):
    return sg.Column([[elem]], size=size, pad=(0, 0), element_justification='center')


def test():
    layout = [[place(sg.B(' ', size=(8, 4), key=(i, j))) for i in range(0, 5)] for j in range(0, 4)]

    window = sg.Window('Trying to change attribute', layout).Finalize()
    window.Maximize()

    while True:  # Event Loop
        event, values = window.read()
        if event in (None, 'Exit'):
            break
        print(event, values)
        window[(1, 1)].update(button_color=('blue', 'yellow'))
        window[(2, 2)].update(visible=False)
        window[(3, 3)].update('Hello')
结果是:


我也复制了它并确认了它。当我使用字符串而不是数字元组格式时,也发生了相同的事件。你应该在开发者的网站上发布这个问题,并提交你的问题。实际上,只有元素(2,2)不可见,而不是元素(4,2)。在这里,不可见元素之后的元素或小部件将向前移动。不是PySimpleGUI上的问题,也不是tkinter上的问题。我也复制了它并确认了它。当我使用字符串而不是数字元组格式时,也发生了相同的事件。你应该在开发者的网站上发布这个问题,并提交你的问题。实际上,只有元素(2,2)不可见,而不是元素(4,2)。在这里,不可见元素之后的元素或小部件将向前移动。PySimpleGUI上没有问题,tkinter上也没有问题。