2011-01-19 16 views
5

Quiero hacer que el marco superior de mi programa GUI se alinee vertical y horizontalmente.¿Cómo puedo hacer que mi wxpython se muestre en la parte superior de mi escritorio?

wx.Frame.__init__(self, parent=None, id= -1, title="Test Frame", pos=(-1, -1), size=(1280, 770), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX) 

¿Qué debo hacer (excepto hacer el cálculo para encontrar la posición absoluta) a pos=(-1, -1) a hacer que se muestre en el medio (no importa 800 * 600 o 800 * 1280, etc.), o la creación de algunos otros atributos también es necesario?

Respuesta

13

Utilice simplemente

self.Center() 

en la clase __init__() en lugar de pos=(-1,-1).

+3

Asegúrese de llamar a 'Centro' después de crear todos los controles secundarios y' Ajustar' para que el tamaño se inicialice correctamente. – FogleBird

+0

Al menos en mi sistema (Ubuntu 14.04, wxgtk 2.8.12.1), esto no cuenta para una configuración de escritorio extendida, es decir, la ventana puede desaparecer de la pantalla principal. – bluenote10

4
w = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_X) 
h = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_Y) 

pos=(w/2, h/2) 

Esto le proporciona el centro de la pantalla.

Ahora, suponiendo que tiene un 800x600 aplicación tamaño:

APPWIDTH = 800 
APPHEIGHT = 600 

w = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_X) 
h = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_Y) 

# Centre of the screen 
x = w/2 
y = h/2 

# Minus application offset 
x -= (APPWIDTH/2) 
y -= (APPHEIGHT/2) 

pos=(x, y) 
+0

'pos = (w/2, h/2)' solo hace que la esquina superior izquierda del marco se muestre en el centro del escritorio, no en el marco completo. Tal vez no haya un atributo de una línea para hacer el trabajo, creo que el cálculo aún es necesario. ¡Gracias de cualquier manera! – Shane

+0

@Shane Eso es un hecho, el cálculo que hice dará al centro de la pantalla. Suponiendo que conoces las dimensiones de tu programa, resta la mitad de ancho y alto, y el marco estará centrado. Ajusté mi respuesta para mostrar esto. – TyrantWave

+0

hay un error tipográfico: 'wx.SYS_SCREEN_y' debe ser' wx.SYS_SCREEN_Y' (observe la mayúscula Y) – rbp

Cuestiones relacionadas