繁体   English   中英

更新不改变 PySimpleGUI 中的可见性

[英]Update not changing visibility in PySimpleGUI

我试图通过使用 visible=False 使 GUI 元素不可见。 似乎更新 function 与所有其他属性以及下面代码中显示的值一起工作,除了可见属性。 具体来说,尽管程序要求元素 (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)

在此处输入图像描述

您遇到的行为是由于不可见的元素在布局中松动了它们的 position。 换句话说,元素 (2,2) 消失了。 如果您稍后让它可见,它将出现在相应行的末尾。

在大多数情况下,这不是我们想要的行为。 您可以通过使用 function 为元素保留一个位置来防止它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')

这是结果:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM