2011-01-19 37 views
5

Tôi muốn làm cho khung hình đầu tiên của chương trình GUI theo cả chiều dọc và chiều ngang.Làm cách nào để làm cho khung hình trên cùng của tôi hiển thị ở giữa màn hình của tôi?

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) 

Tôi nên làm gì (ngoại trừ làm việc tính toán để tìm ra vị trí tuyệt đối) để pos=(-1, -1) để làm cho nó hiển thị ở giữa (không có vấn đề 800 * 600 hoặc 1280 * 800 vv), hoặc một số thuộc tính khác thiết cũng cần?

Trả lời

13

Đơn giản chỉ cần sử dụng

self.Center() 

trong lớp __init__() thay vì pos=(-1,-1).

+3

Hãy chắc chắn để gọi 'Trung tâm' sau khi tạo tất cả các điều khiển con và' Fit' để kích thước được khởi tạo đúng cách. – FogleBird

+0

Ít nhất là trên hệ thống của tôi (Ubuntu 14.04, wxgtk 2.8.12.1), điều này không tính đến cấu hình máy tính để bàn mở rộng, tức là, cửa sổ có thể biến mất khỏi màn hình chính. – bluenote10

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

pos=(w/2, h/2) 

Điều này mang lại cho bạn trung tâm của màn hình.

Bây giờ, giả sử bạn có một ứng dụng 800x600 kích thước:

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)' chỉ làm góc trên cùng bên trái của khung hiển thị ở giữa màn hình chứ không phải toàn bộ khung. Có lẽ không có thuộc tính một dòng để thực hiện công việc, tính toán vẫn cần tôi đoán. Dù sao cũng cảm ơn bạn! – Shane

+0

@Shane Đó là một cách nhất định, phép tính tôi đã làm sẽ cho tâm của màn hình. Giả sử bạn biết kích thước của chương trình, trừ đi một nửa chiều rộng và chiều cao của nó, và khung sẽ được căn giữa. Tôi đã điều chỉnh câu trả lời của mình để hiển thị điều này. – TyrantWave

+0

có lỗi đánh máy: 'wx.SYS_SCREEN_y' phải là' wx.SYS_SCREEN_Y' (ghi chú vốn Y) – rbp

Các vấn đề liên quan