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