【发布时间】:2021-06-09 01:44:49
【问题描述】:
我在使用 sizers 设置布局时遇到问题。将有 7 个“胶囊”,其中包含用于信息的 wx.StaticTex、用于用户输入的 wx.TextCtrl 和用于视觉效果的右侧图标。如果我想更详细一点,我想为 StaticText 留出“更多空间”,或者我可以选择更小的字体:
这就是我现在得到的:
这是我的代码:
import wx
class ParametersWindow(wx.Frame):
def __init__(self, *args, **kwargs):
super(ParametersWindow, self).__init__(*args, **kwargs)
self.SetSize((400, 600))
self.SetTitle(f'{SOFTWARE_NAME}')
self.Center()
self.Bind(wx.EVT_CLOSE, self.OnCloseApp)
self.setupTextFields()
def setupTextFields(self):
""" Constroi as caixinhas de texto. """
self.textBoxesRefs = []
vWrapperBox = wx.BoxSizer(wx.VERTICAL)
for i in range(0, 7):
text = self.getTextCtrl()
text.Bind(wx.EVT_TEXT, self.OnKeyTyped)
self.textBoxesRefs.append(text)
vBox = self.getVerticalBox()
vBox.Add(self.getStaticText(self.getLabel(i)))
vBox.Add(text, flag=wx.EXPAND | wx.ALL)
hBox = self.getHorizontalBox()
hBox.Add(vBox, flag=wx.EXPAND | wx.ALL)
image = wx.StaticBitmap(self, wx.ID_ANY)
image.SetBitmap(wx.Bitmap('icons/test.png'))
hBox.Add(image, flag=wx.EXPAND | wx.ALL)
vWrapperBox.Add(hBox, flag=wx.EXPAND | wx.ALL)
self.SetSizerAndFit(vWrapperBox)
def getVerticalBox(self):
""" Retorna a referencia de uma wx.BoxSizer(wx.VERTICAL). """
return wx.BoxSizer(wx.VERTICAL)
def getHorizontalBox(self):
""" Retorna a referencia de uma wx.BoxSizer(wx.HORIZONTAL). """
return wx.BoxSizer(wx.HORIZONTAL)
def getStaticText(self, label):
""" Retorna a referencia de uma wx.StaticText(). """
return wx.StaticText(self, label = label)
def getTextCtrl(self):
""" Retorna a referencia de um wx.TextCtrl. """
return wx.TextCtrl(self)
def getBitmap(self, path):
""" Retorna a referencia de um wx.Bitmap(). """
return wx.Bitmap(path)
它是“可保存的”吗?
谢谢!
【问题讨论】:
-
你有什么问题?看起来你有一些有用的东西。您是在问如何使所有行的大小相同?
-
@TimRoberts 是的,很抱歉造成混乱。在我的脑海中,图像会在最右边,而 staticText 和 textCtrl 的大小都是一样的。
-
我想也许您正在寻找的是wxFlexGridSizer?假设我正确理解了您的问题...这是 C++ 链接,但我认为让 Python 版本正常工作很容易。您还可以为 wxTextBox 传递一个恒定的宽度大小吗?
-
谢谢,@segmentation_fault。将sizer放在东西上为我完成了交易。 :)
标签: python user-interface wxwidgets