使用 pysimplegui 将按钮对齐到窗口的中心

新手上路,请多包涵

在我的应用程序中,我试图将我的按钮、文本和输入放在窗口的中心。我正在使用 PySimpleGUI 来设计按钮。为了与中心对齐,我在我的代码中使用了 justification='center' 属性。但仍然如此不适合窗口的中心。

正在使用的代码是

import PySimpleGUI as sg
from tkinter import *
sg.theme('DarkAmber')
layout = [
        [sg.Text('Enter the value',justification='center')],
        [sg.Input(justification='center')],
        [sg.Button('Enter','center')]
     ]

  window = sg.Window('My new window', layout, size=(500,300), grab_anywhere=True)

 while True:
event, values = window.read()   # Read the event that happened and the values dictionary
print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':     # If user closed window with X or if user clicked "Exit" button then exit
    break
if event == 'Button':
  print('You pressed the button')
window.close()

以上代码输出 在此处输入图像描述 我怎样才能使文本、按钮和输入到窗口的中心?

原文由 Avinash Babu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

此代码使文本、按钮和输入位于窗口的中心。

 import PySimpleGUI as sg
sg.theme('DarkAmber')
layout = [
        [sg.Text('Enter the value',justification='center',size=(100,1))],
        [sg.Input(justification='center',size=(100,1))],
        [sg.Button('Enter','center',size=(100,1))]
     ]

window = sg.Window('My new window', layout, size=(500,300), grab_anywhere=True)

while True:
    event, values = window.read()   # Read the event that happened and the values dictionary
    print(event, values)
    if event == None or event == 'Exit':     # If user closed window with X or if user clicked "Exit" button then exit
        break
    if event == 'Button':
      print('You pressed the button')
    window.close()

原文由 Bhargav Desai 发布,翻译遵循 CC BY-SA 4.0 许可协议

我想这就是你要找的

window = sg.Window('My new window', layout, element_justification='c')


编辑 - 垂直居中(请参阅下面的 2022 年 3 月编辑以获得更好的解决方案)

在窗口中垂直居中布局是一件比较麻烦的事情。需要的是 2 个元素,它们会在窗口展开时展开。这是一个演示程序,是 PySimpleGUI GitHub 上演示的一部分

import PySimpleGUI as sg

"""
    Center a column in a window
    Solves a very specific kind of layout.
    If you want to have something centered in a Window, this is a good way to do it
    The "trick" here is:
        * the first row of the layout has a Text element that expands vertically
        * the row with the Column has a text element that expands horizontally

    This expanding Text element is what will cause the Column element to be centered

    Used with permission
"""

def main():
    column_to_be_centered = [  [sg.Text('My Window')],
                [sg.Input(key='-IN-')],
                [sg.Text(size=(12,1), key='-OUT-')],
                [sg.Button('Go'), sg.Button('Exit')]  ]

    layout = [[sg.Text(key='-EXPAND-', font='ANY 1', pad=(0, 0))],  # the thing that expands from top
              [sg.Text('', pad=(0,0),key='-EXPAND2-'),              # the thing that expands from left
               sg.Column(column_to_be_centered, vertical_alignment='center', justification='center',  k='-C-')]]

    window = sg.Window('Window Title', layout, resizable=True,finalize=True)
    window['-C-'].expand(True, True, True)
    window['-EXPAND-'].expand(True, True, True)
    window['-EXPAND2-'].expand(True, False, True)

    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-'].update(values['-IN-'])
    window.close()

if __name__ == '__main__':
    main()


编辑 2022 年 3 月 18 日

与 PySimpleGUI 中的许多事情一样,元素对齐等操作也在不断发展。同样,StackOverflow 的问题是这些答案通常不会更新。这就是为什么我建议始终使用 GitHub Issues 来提问并查看 Cookbook、eCookbook 和 Demo Programs 以获取最新技术的原因。

去年引入了两个新元素,使水平和垂直对齐变得微不足道。这些元素是 PushVPush 。您会 在 eCookbook 中找到食谱

这些元素“推动”周围的其他元素。 Push 水平移动它们, VPush 垂直移动它们。

如果您在元素/行的两侧都按下,那么这些元素/行将居中。

除了使用这些 PushVPush 元素外,这里的布局与上面的示例相同。此解决方案更短且更容易理解。

 import PySimpleGUI as sg

def main():
    column_to_be_centered = [  [sg.Text('My Window')],
                [sg.Input(key='-IN-')],
                [sg.Text(size=(12,1), key='-OUT-')],
                [sg.Button('Go'), sg.Button('Exit')]]

    layout = [[sg.VPush()],
              [sg.Push(), sg.Column(column_to_be_centered,element_justification='c'), sg.Push()],
              [sg.VPush()]]

    window = sg.Window('Window Title', layout, size=(500,300))

    while True:
        event, values = window.read()
        if event == sg.WIN_CLOSED or event == 'Exit':
            break

    window.close()

if __name__ == '__main__':
    main()

在此处输入图像描述

原文由 Mike from PSG 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题