Edit: Mặc dù tất cả mọi thứ bình luận bên dưới công trình trên cửa sổ, tùy chọn đầu tiên sẽ không hoạt động trên, cho Ví dụ, Ubuntu do có thể là một lỗi. Một bài viết trước được đưa ra trong các bình luận chỉ ra rằng cùng một vấn đề được tìm thấy trong OSX.
Trong mọi trường hợp, tùy chọn thứ hai sử dụng sizers dọc hoạt động cả trong Ubuntu và cửa sổ để bạn có thể thử trên OSX.
Văn bản của bạn có hướng dẫn căn chỉnh theo cách bạn muốn với wx.ALIGN...
và trên thực tế, nó được căn chỉnh. Tuy nhiên kích thước của StaticText không phải là của bảng điều khiển mà chỉ là kích thước của văn bản. Đã hạn chế vị trí của nó theo kích thước riêng của nó, bạn không thể thấy sự khác biệt giữa các chế độ căn chỉnh.
Bạn có hai lựa chọn để giải quyết vấn đề:
Lựa chọn 1. Mở rộng kích thước StaticText phụ tùng và vị trí văn bản của bạn trên đó
Bạn có thể mở rộng kích thước của widget StaticText bạn sử dụng tham số của nó size
. Đây là một giải pháp tồi trừ các bậc cha mẹ hoặc khung hình có kích thước cố định, bạn sẽ không thay đổi kích thước hoặc tái sử dụng trong các ứng dụng khác. Nếu kích thước của tiện ích chứa văn bản thay đổi thì vị trí tương đối của văn bản cũng sẽ được sửa đổi vì kích thước của nó vẫn cố định. Vì vậy, nó luôn luôn là tốt hơn để tổ chức các vật dụng của bạn bằng phương tiện của sizers.
Tỷ lệ không gian có sẵn widget chiếm trong khe sizer được cho bởi tham số thứ hai trong sizer.Add()
(0
được kích thước tối thiểu, 1
đầy nghề nghiệp):
sizer_2.Add(self.label_1, 0, 0, 0)

Để xem văn bản được căn chỉnh trong bảng điều khiển như bạn muốn bạn phải thông báo cho StaticText để mở rộng đến tất cả không gian có sẵn:
sizer_2.Add(self.label_1, 1, 0, 0)

Ở đây bạn có mã liên quan:
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.panel_1 = wx.Panel(self, -1)
self.label_1 = wx.StaticText(self.panel_1, -1, "label_1", style=wx.ALIGN_RIGHT)
self.panel_2 = wx.Panel(self, -1)
self.label_2 = wx.StaticText(self.panel_2, -1, "label_2", style=wx.ALIGN_CENTRE)
self.panel_3 = wx.Panel(self, -1)
self.label_3 = wx.StaticText(self.panel_3, -1, "label_3")
self.panel_1.SetBackgroundColour(wx.Colour(0, 255, 0))
self.panel_2.SetBackgroundColour(wx.Colour(0, 255, 255))
self.panel_3.SetBackgroundColour(wx.Colour(219, 112, 147))
sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
sizer_2.Add(self.label_1, 1, 0, 0)
sizer_3.Add(self.label_2, 1, 0, 0)
sizer_4.Add(self.label_3, 1, 0, 0)
self.panel_1.SetSizer(sizer_2)
self.panel_2.SetSizer(sizer_3)
self.panel_3.SetSizer(sizer_4)
sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
sizer_1.Add(self.panel_2, 1, wx.EXPAND, 0)
sizer_1.Add(self.panel_3, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
sizer_1.Fit(self)
self.Layout()

Note mã được lâu hơn cần thiết để mimick ví dụ của bạn với ba tấm. Bạn có cùng một khung nhìn bằng cách sử dụng một bảng duy nhất. Trong thực tế, nó có thể được đơn giản hóa hơn nữa không sử dụng tấm pin và thiết lập StaticText trực tiếp trên sizer:
class MyFrame2(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.label_1 = wx.StaticText(self, -1, "label_1", style=wx.ALIGN_RIGHT)
self.label_2 = wx.StaticText(self, -1, "label_2", style=wx.ALIGN_CENTRE)
self.label_3 = wx.StaticText(self, -1, "label_3")
self.label_1.SetBackgroundColour(wx.Colour(127, 255, 0))
self.label_2.SetBackgroundColour(wx.Colour(0, 255, 255))
self.label_3.SetBackgroundColour(wx.Colour(219, 112, 147))
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.label_1, 1, wx.EXPAND, 0)
sizer.Add(self.label_2, 1, wx.EXPAND, 0)
sizer.Add(self.label_3, 1, wx.EXPAND, 0)
self.SetSizer(sizer)
sizer.Fit(self)
self.Layout()
Lựa chọn 2. Xác định vị trí các widget riêng của mình ở vị trí mong muốn ở không gian có sẵn của sizer. Bạn có thể sử dụng tham số position
của StaticText
cho mục đích đó. Nhưng điều này sẽ có cùng một vấn đề được nêu ở trên để sử dụng size
. Vì vậy, một lần nữa bạn muốn kiểm soát hình học của quan điểm của bạn với sizers. Bạn đặt các widget trong sizer sử dụng một trong số:
sizer_6.Add(self.label_5, 0, wx.ALIGN_RIGHT, 0)
hoặc
sizer_7.Add(self.label_6, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
Đối với một số lý do, để làm việc này bạn cần một BoxSizer
(và trong cách thẳng đứng cùng, nếu bạn sẽ muốn sử dụng wx.ALIGN_CENTER_VERTICAL bạn sẽ cần một ngang BoxSizer
:
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.panel_4 = wx.Panel(self, -1)
self.label_5 = wx.StaticText(self.panel_4, -1, "label_5")
self.panel_5 = wx.Panel(self, -1)
self.label_6 = wx.StaticText(self.panel_5, -1, "label_6")
self.panel_6 = wx.Panel(self, -1)
self.label_7 = wx.StaticText(self.panel_6, -1, "label_7")
self.panel_4.SetBackgroundColour(wx.Colour(0, 255, 255))
self.panel_5.SetBackgroundColour(wx.Colour(127, 255, 0))
self.panel_6.SetBackgroundColour(wx.Colour(219, 112, 219))
sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
sizer_8 = wx.BoxSizer(wx.VERTICAL)
sizer_7 = wx.BoxSizer(wx.VERTICAL)
sizer_6 = wx.BoxSizer(wx.VERTICAL)
sizer_6.Add(self.label_5, 0, wx.ALIGN_RIGHT, 0)
sizer_7.Add(self.label_6, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
sizer_8.Add(self.label_7, 0, 0, 0)
self.panel_4.SetSizer(sizer_6)
self.panel_5.SetSizer(sizer_7)
self.panel_6.SetSizer(sizer_8)
sizer_1.Add(self.panel_4, 1, wx.EXPAND, 0)
sizer_1.Add(self.panel_5, 1, wx.EXPAND, 0)
sizer_1.Add(self.panel_6, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
sizer_1.Fit(self)
self.Layout()
tùy chọn này ngụ ý một sự kết hợp của các tấm và Sizers thứ tại tạo ra một mã khó khăn hơn để đơn giản hóa hơn so với hiển thị cho tùy chọn đầu tiên.
Sao chép: http://stackoverflow.com/questions/8587060/wxpython-text-alignment-does-not-work/8612146#8612146 –
Có thể bạn có thể thêm thông tin về môi trường thử nghiệm của mình (OS, phiên bản Python, phiên bản wxPython). –