【问题标题】:PySimpleGui right justify a button in a framePySimpleGui 右对齐框架中的按钮
【发布时间】:2021-10-25 23:59:43
【问题描述】:

我正在使用 pysimplegui 构建一个简单的 GUI,并希望将框架内的按钮右对齐。我找到了有关如何使用文本而不是按钮执行此操作的详细信息。

例如,我希望下面的按钮与框架的右侧对齐,并在其周围有凹槽。我想要这个:

看起来更像这样:

但不必添加手动调整的空白文本元素以使其接近,因为这通常无法正确排列(请注意下面注释掉的 sg.Text("", size=(22, 1)) 行)。

import sys
import PySimpleGUI as sg

sg.theme("Light Blue 2")
layout = [
    [
        sg.Text("Target folder", size=(9, 1)),
        sg.InputText(default_text="Choose a folder...", size=(59, 1)),
        sg.FolderBrowse(),
    ],
    [
        sg.Frame(
            layout=[
                [
                    sg.Text("First parameter", size=(15, 1)),
                    sg.InputText(default_text="2", size=(3, 1),),
                ],
                [
                    sg.Text("Second parameter", size=(15, 1)),
                    sg.InputText(default_text="8", size=(3, 1),),
                    # sg.Text("", size=(22, 1)),
                    sg.Submit("A nice button", size=(23, 1)),
                ],
                [sg.ProgressBar(1, orientation="h", size=(50, 20))],
            ],
            title="Cool subpanel",
            relief=sg.RELIEF_GROOVE,
        )
    ],
]
window = sg.Window("Test window", layout)

while True:
    event, values = window.read()
    if event == "Cancel" or event is None:
        sys.exit()

【问题讨论】:

    标签: python user-interface pysimplegui


    【解决方案1】:

    您可以将框架部分的内容拆分为两个sg.Columns,然后将expand_x 设置为True,将element_justification 设置为right,并将vertical_alignment 设置为bottom,这将获得您的定位.

    import sys
    import PySimpleGUI as sg
    
    sg.theme("Light Blue 2")
    
    l_col = sg.Column(
        [
            [
                sg.Text("First parameter", size=(15, 1)),
                sg.InputText(default_text="2", size=(3, 1)),
            ],
            [
                sg.Text("Second parameter", size=(15, 1)),
                sg.InputText(default_text="8", size=(3, 1)),
            ],
        ]
    )
    r_col = sg.Column(
        [[sg.Submit("A nice button", size=(23, 1))]],
        element_justification="right",
        vertical_alignment="bottom",
        expand_x=True,
    )
    
    layout = [
        [
            sg.Text("Target folder", size=(9, 1)),
            sg.InputText(default_text="Choose a folder...", size=(59, 1)),
            sg.FolderBrowse(),
        ],
        [
            sg.Frame(
                layout=[
                    [l_col, r_col],
                    [sg.ProgressBar(1, orientation="h", size=(50, 20))],
                ],
                title="Cool subpanel",
                relief=sg.RELIEF_GROOVE,
            )
        ],
    ]
    window = sg.Window("Test window", layout)
    
    while True:
        event, values = window.read()
        if event == "Cancel" or event is None:
            sys.exit()
    

    在 macOS 上的尺寸似乎有点偏,但这应该可以满足需要。

    【讨论】:

    • 这行得通。在每一列中添加pad=(0, 0) 可以消除列本身添加的不需要的间距。
    【解决方案2】:

    将内联按钮替换为具有零填充的列元素也可以,并且需要较少的代码修改。

    对于旧版本的 PySimpleGUI,expand_x 参数未定义,因此您必须为列分配一个键并显式调用 expand 方法:

    import sys
    import PySimpleGUI as sg
    
    sg.theme("Light Blue 2")
    
    layout = [
        [
            sg.Text("Target folder", size=(9, 1)),
            sg.InputText(default_text="Choose a folder...", size=(59, 1)),
            sg.FolderBrowse(),
        ],
        [
            sg.Frame(
                layout=[
                    [
                        sg.Text("First parameter", size=(15, 1)),
                        sg.InputText(default_text="2", size=(3, 1),),
                    ],
                    [
                        sg.Text("Second parameter", size=(15, 1)),
                        sg.InputText(default_text="8", size=(3, 1),),
                        sg.Column(
                            [[sg.Submit("A nice fat button", size=(23, 1))]],
                            element_justification="right",
                            expand_x=True,
                            key="c1",
                            pad=(0, 0),
                        ),
                    ],
                    [sg.ProgressBar(1, orientation="h", size=(50, 20))],
                ],
                title="Cool subpanel",
                relief=sg.RELIEF_GROOVE,
            )
        ],
    ]
    window = sg.Window("Test window", layout)
    # window['c1'].expand(True, False, False) # use this when 'expand_x' flag is not available
    
    while True:
        event, values = window.read()
        if event == "Cancel" or event is None:
            sys.exit()
    
    

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 2021-05-25
      • 2014-11-09
      • 2019-10-05
      • 2017-06-13
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多