[英]Dynamically change row size PySimpleGUI
我试图在按下按钮时在 UI 中动态显示行。
为此,我首先在布局中声明该行,但将其隐藏。 然后当我得到值时,我隐藏了行。
有时文字很大,所以我在python中使用textwrap的填充方法。 所以这给了我 2 到 3 行的文本。
但是当我尝试时,每个字符出现在不同的行中。
disp_text = "Text:\n{}".format(textwrap.fill(some_text,70))
size = (70,disp_text.count("\n")+1)
window['-TEXT-'].set_size(size)
window['-TEXT-'].update(value = disp_text,visible = True)
假设some_text
是"Hello how are you....(and some 50 other characters)"
现在,使用上面的字符串, size
为(70,3)
因此,理想情况下,它应该将some_text
包装成 3 行。
但是GUI中实际的output是:
H
e
l
这基本上是some_text
在 3 个单独的行中的前 3 个字符,而不是some_text
在 3 个不同的行中的一段时间。
如何解决这个问题?
打印您的 disp_text 以确保它符合您的想法。
这是一种方法。
import PySimpleGUI as sg
def main():
layout = [ [sg.Text('My Window')],
[sg.Text(size=(20,1), auto_size_text=False, key='-OUT-')],
[sg.Button('Go'), sg.Button('Exit')] ]
window = sg.Window('Window Title', layout)
while True: # Event Loop
event, values = window.read()
print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'Go':
window['-OUT-'].set_size((20, 10))
window['-OUT-'].update('This is my output string\nThat spans multiple rows\nAll the way to 3\n'+
'It will even wrap if the string is too long')
wraplen = window['-OUT-'].Widget.winfo_reqwidth() # width tkinter says widget will be
window['-OUT-'].Widget.configure(wraplen=wraplen) # set wrap to width of widget to match contents
window.close()
if __name__ == '__main__':
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.