1
votes

Aligner le bouton au centre de la fenêtre à l'aide de pysimplegui

Dans mon application, j'essaie de placer mon bouton, mon texte et ma saisie au centre de la fenêtre.J'utilise PySimpleGUI pour concevoir des boutons.Pour l'aligner au centre, j'ai utilisé justification = l'attribut 'center' sur mon code, mais il ne correspond toujours pas au centre de la fenêtre.

Le code avec lequel je travaille est

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()

Le au-dessus des sorties de code entrez la description de l'image ici Comment puis-je placer le texte, le bouton et l'entrée au centre de la fenêtre?


1 commentaires

Regardez peut-être le programme de démonstration "Demo_Layout_Vertical_Centered.py" sur le GitHub du projet.


4 Réponses :


0
votes

ce code place le texte, le bouton et l'entrée au centre de la fenêtre.

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()


2 commentaires

@BharGav Desai - ce code ne centre pas le bouton, il centre le texte dans le bouton en pleine largeur. Si vous faites le bouton par exemple la taille (10,1), il est toujours à gauche de l'écran. L'élément_justification = 'c' est nécessaire pour centrer le bouton sur l'écran - mais cela centre tout. Idéalement, j'aimerais pouvoir centrer les boutons dans un cadre, mais avoir des entrées de texte à gauche et / ou à droite justifiées dans différents cadres dans la même fenêtre.


Doit être un code incorrect, le deuxième argument de sg.Button est pour button_type . Tous les éléments ne sont pas alignés au centre de la fenêtre.



6
votes

Je pense que c'est ce que vous recherchez

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()

Modifier - Centrer verticalement

Centrer une mise en page verticalement dans une fenêtre est un peu plus grand d'une corvée. Ce qu'il faut, ce sont 2 éléments qui se développeront lorsque la fenêtre s'agrandira. Ceci est un programme de démonstration qui fait partie des démos sur PySimpleGUI GitHub

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


0 commentaires

1
votes

Le meilleur devrait être l'option element_justification = 'center' pour Container sg.Column , peut-être que tous les éléments ne sont pas alignés au centre de la fenêtre requis.

entrer l'image description ici

import PySimpleGUI as sg

sg.theme('DarkAmber')

layout_column = [
        [sg.Text('Enter the value',justification='center')],
        [sg.Input(justification='center', key='-INPUT-')],
        [sg.Button('Enter')]
]

layout = [[sg.Column(layout_column, element_justification='center')]]

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

while True:
    event, values = window.read()
    print(event, values)
    if event == sg.WIN_CLOSED or event == 'Exit':
        break
    if event == 'Button':
        print('You pressed the button')
window.close()


0 commentaires

0
votes

Si vous voulez un contrôle plus direct de l'endroit où vos éléments apparaissent, vous pouvez utiliser le mot-clé pad à l'intérieur de presque tous les éléments (bouton, texte, entrée, etc.).

Il y a deux formats valides:

  • pad = (, ) pad [0] remplit vers la gauche et la droite et pad [1] est un remplissage au-dessus et en dessous de l'élément.
  • pad = ((, ), (, )) où se trouve le premier tuple remplissage à gauche (premier élément) et à droite (deuxième élément) et le deuxième tuple est le remplissage au-dessus (premier) et en dessous (deuxième).

Donc, pour vous centrer sur les éléments de votre exemple de code en utilisant le mot-clé pad , vous feriez quelque chose comme ceci:

import PySimpleGUI as sg
sg.theme('DarkAmber')
layout = [
        [sg.Text('Enter the value', pad=(190, 0))],
        [sg.Input(justification='center', pad=(75, 0))],
        [sg.Button('Enter', pad=(215, 0))]
     ]


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

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

REMARQUE: Le code ci-dessus a été légèrement modifié par rapport à l'original pour correspondre aux normes PEP8.

Le résultat est:

 Image de la nouvelle fenêtre p >


1 commentaires

En passant, vous pouvez également justifier des éléments individuels en utilisant sg.Column (layout, justification = 'c') dans votre liste de mise en page globale. Tout n'a pas besoin d'être justifié au centre.