python - PySimpleGUI,如何让字符串在新行上打印而不是切断它?

标签 python pysimplegui

我正在开发一个图像查看器,但我注意到在图像查看器中,当要显示的链接太长时,它会被切断。我怎样才能修改这段代码,以便如果字符串太长,它会在新行上打印它。我正在遵循指南,因此您可以查看 https://realpython.com/pysimplegui-python/

# img_viewer.py


import PySimpleGUI as sg

import os.path


# First the window layout in 2 columns


file_list_column = [

    [

        sg.Text("Image Folder"),

        sg.In(size=(25, 1), enable_events=True, key="-FOLDER-"),

        sg.FolderBrowse(),

    ],

    [

        sg.Listbox(

            values=[], enable_events=True, size=(40, 20), key="-FILE LIST-"

        )

    ],

]


# For now will only show the name of the file that was chosen

image_viewer_column = [

    [sg.Text("Choose an image from list on left:")],

    [sg.Text(size=(40, 1), key="-TOUT-")],

    [sg.Image(key="-IMAGE-")],

]


# ----- Full layout -----

layout = [

    [

        sg.Column(file_list_column),

        sg.VSeperator(),

        sg.Column(image_viewer_column),

    ]

]


window = sg.Window("Image Viewer", layout)


# Run the Event Loop

while True:

    event, values = window.read()

    if event == "Exit" or event == sg.WIN_CLOSED:

        break

    # Folder name was filled in, make a list of files in the folder

    if event == "-FOLDER-":

        folder = values["-FOLDER-"]

        try:

            # Get list of files in folder

            file_list = os.listdir(folder)

        except:

            file_list = []


        fnames = [

            f

            for f in file_list

            if os.path.isfile(os.path.join(folder, f))

            and f.lower().endswith((".png", ".gif"))

        ]

        window["-FILE LIST-"].update(fnames)

    elif event == "-FILE LIST-":  # A file was chosen from the listbox

        try:

            filename = os.path.join(

                values["-FOLDER-"], values["-FILE LIST-"][0]

            )

            window["-TOUT-"].update(filename)

            window["-IMAGE-"].update(filename=filename)


        except:

            pass


window.close()

最佳答案

对我来说,最好使用库 textwrap 将文本填充到新文本中,并在分配之前换行 '\n' sg.Text。将 size 设置为 (40, None)40 是环绕长度。

您将得到一个很好的字符串作为输出,可能比列表更好;)

示例如下:

import textwrap
import PySimpleGUI as sg

sg.theme("DarkBlue3")
sg.set_options(font=("Courier New", 16))

text = (
    "The mission of the Python Software Foundation is to promote, protect, "
    "and advance the Python programming language, and to support and "
    "facilitate the growth of a diverse and international "
    "community of Python programmers.")

new_text = textwrap.fill(text, 40)

layout = [
    [sg.Text("Line", size=(40, None), key="OUT")],
    [sg.Button("Update1"), sg.Button("Update2")],
]

window = sg.Window('Title', layout, finalize=True)

while True:
    event, values = window.read()
    if event in (sg.WINDOW_CLOSED, "Exit"):
        break
    elif event == 'Update1':
        window['OUT'].update(new_text)
    elif event == 'Update2':
        window['OUT'].update("Line")
    print(event, values)

window.close()

关于python - PySimpleGUI,如何让字符串在新行上打印而不是切断它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67353402/

相关文章:

python - 如何通过 TLS 1.2 运行 django runserver

python - 如何在 pysimplegui 中增加 inputText 框?

python - 是否可以在 PysimpleGui 表中插入复选框?

python - 如何正确设置 python/c 库?

python - 使用ReferenceProperty时如何查询数据存储?

python - OpenCV 在 Mac 上全屏显示图像,没有白色边框

python - django:从构造函数或模型形式创建对象

python - 有人可以向我展示一个不在循环中使用 pysimplegui 的示例 - 也许作为我可以手动更新的定义设置

python - 更新 Popup.Animated 以播放 gif 直到外部任务完成 (PYSimpleGUI)

python - PySimpleGUI 循环需要更好的方法