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
Comment puis-je placer le texte, le bouton et l'entrée au centre de la fenêtre?
4 Réponses :
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()
@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.
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')
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.
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()
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 = (, ) où 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:
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.
Regardez peut-être le programme de démonstration "Demo_Layout_Vertical_Centered.py" sur le GitHub du projet.