我已經閱讀了很多與此類似的問題,但我正在屈服並製作自己的問題,因為沒有任何效果。基本上,我想wx.StaticText
在調整窗口大小的同時讓我的文本垂直居中。我的理解是現有的解決方案不起作用,因為我關心 的背景StaticText
,所以我不能簡單地將標籤本身垂直居中在一個 sizer 中。我還看到它需要凌亂的子類化才能擁有透明背景的 StaticText,因此將其覆蓋在面板上聽起來很困難。
這是一個最小的例子(在我的項目中,sizer 中還有其他一些東西):
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, title='Sample')
sizer=wx.BoxSizer(wx.VERTICAL)
label = wx.StaticText(self, -1, 'PLEASE VERTICALLY CENTER ME ;(', style=wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE)
label.SetMinSize((300,300))
label.SetBackgroundColour((255,0,0))
sizer.Add(label, 1, wx.EXPAND | wx.ALL, 10)
self.SetSizerAndFit(sizer)
if __name__ == '__main__':
app=wx.App()
frame=MyFrame()
frame.Show()
app.MainLoop()
儘管如此,很難接受垂直居中文本並不簡單。使標籤中的文本垂直居中的最簡單方法是什麼?
解決方案: catalin 的回答給出了必要的概念!這是針對遇到此問題的任何其他人的完整片段。我在 StaticText 下方添加了一個按鈕來演示仍處於控制中的垂直 sizer。如果您的應用程序不需要它,可以完全刪除垂直尺寸器。
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, title='Sample')
sizer=wx.BoxSizer(wx.VERTICAL) # "main" sizer
panel = wx.Panel(self) # panel just for centering label
panel.SetBackgroundColour((255,0,0))
label = wx.StaticText(panel, -1, 'PLEASE VERTICALLY CENTER ME ;(', style=wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE)
hsizer=wx.BoxSizer(wx.HORIZONTAL) # sizer for the panel
hsizer.Add(label, 1, wx.ALIGN_CENTER_VERTICAL)
panel.SetSizer(hsizer)
sizer.Add(panel, 1, wx.EXPAND)
btn = wx.Button(self, -1, 'Button')
sizer.Add(btn, 0, wx.EXPAND)
self.SetSizerAndFit(sizer)
if __name__ == '__main__':
app=wx.App()
frame=MyFrame()
frame.Show()
app.MainLoop()
在 C++ 中,一種快速的方法如下所示:
wxPanel* p = new wxPanel(this); // you don't need to put it in a sizer if it's the only child
p->SetBackgroundColour({ 255, 0, 0 }); // this will be inherited by children
wxStaticText* label = new wxStaticText(p, wxID_ANY, "PLEASE VERTICALLY CENTER ME ;(");
wxSizer* s = new wxBoxSizer(wxHORIZONTAL); // for vertical one, you'd need stretch-spacers, and could not use wxALIGN_CENTER_VERTICAL, see below
s->Add(label, wxSizerFlags(1).Align(wxALIGN_CENTER_VERTICAL));
p->SetSizer(s);
請注意,如果您希望文本在調整大小時換行,wxStaticText
則可能無法正確調整大小,您可能需要將其替換為其他內容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句