2011-01-19 17 views
5

Chcę, aby moja górna ramka programu GUI była wyrównana w pionie i w poziomie.Jak ustawić górną ramkę wxpython na środku mojego pulpitu?

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) 

Co należy zrobić (oprócz wykonać obliczenia, aby znaleźć położenie bezwzględne) do pos=(-1, -1), aby pokazać się w środku (bez względu na to 800 * 600 * 800 lub 1280 itd.) Lub ustawić inne atrybuty również potrzebne?

Odpowiedz

13

Wystarczy użyć

self.Center() 

w klasie __init__() zamiast pos=(-1,-1).

+3

Pamiętaj, aby wywołać 'Center' po utworzeniu wszystkich elementów podrzędnych i' Fit', aby rozmiar został poprawnie zainicjowany. – FogleBird

+0

Przynajmniej w moim systemie (Ubuntu 14.04, wxgtk 2.8.12.1), nie uwzględnia to rozszerzonej konfiguracji pulpitu, tzn. Okno może zniknąć z głównego ekranu. – bluenote10

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

pos=(w/2, h/2) 

Daje to centrum ekranu.

Teraz, zakładając masz 800x600 wielkości aplikacji:

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)' powoduje, że lewy górny róg ramki jest wyświetlany tylko na środku pulpitu, a nie na całej ramce. Być może nie ma jednego typu atrybutu do wykonania tej pracy, nadal potrzebne są obliczenia. Dzięki i tak! – Shane

+0

@Shane To jest dane, obliczenia, które zrobiłem, dadzą środek ekranu. Zakładając, że znasz wymiary swojego programu, odejmij połowę jego szerokości i wysokości, a ramka zostanie wyśrodkowana. Poprawiłem odpowiedź, aby to pokazać. – TyrantWave

+0

Jest literówka: 'wx.SYS_SCREEN_y' powinno być' wx.SYS_SCREEN_Y' (uwaga kapitału Y) – rbp