wx.TextCtrl() 文本输入上的 wxPython 标签放置
wxPython Label placement on wx.TextCtrl() text inputs
美好的一天,
我正在使用 wxPython 并且想要一些文本输入,就像在这个示例中一样:
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title)
self.CreateStatusBar() # A Statusbar in the bottom of the window
#Input Fields
inputsdict = { 0:"A",
1:"B",
2:"C"
}
defaultvalue= { 0:"Some Text",
1:"Some Text",
2:"Some Text"
}
# the edit control - one line version.
#self.paralbl = wx.StaticText(self, label="Filter Parameters")
self.entryboxes = wx.BoxSizer(wx.VERTICAL)
self.entrys=[]
for item in inputsdict:
self.lblname = wx.StaticText(self, label=inputsdict[item])
self.entrys.append(wx.TextCtrl(self,value=defaultvalue[item]))
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 1, wx.EXPAND|wx.BOTTOM,10)
self.Bind(wx.EVT_TEXT, self.EvtText, self.entrys[item])
self.Bind(wx.EVT_CHAR, self.EvtChar, self.entrys[item])
#Layout
# Use some sizers to see layout options
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.sizer.Add(self.entryboxes, 2,wx.EXPAND)
#Layout sizers
self.SetSizer(self.sizer)
self.SetAutoLayout(1)
self.sizer.Fit(self)
self.Show()
def EvtChar(self, event):
pass
def EvtText(self, event):
pass
FilterTool = wx.App(False) # Create a new app, don't redirect stdout/stderr to a window.
wnd = MainWindow(None, "Input Field Sample") # A Frame is a top-level window.
FilterTool.MainLoop()
结果如下所示:
这几乎就是我想要的,但请注意,标签比它们所指的更靠近它们上方的输入字段。
我希望,那:
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 1, wx.EXPAND|wx.BOTTOM,10)
在条目的底部添加一个边框,并将标签和条目字段之间的边框设置为 0,以便它们相互接触。但是只要一般的displayspace没有溢出,只是label和对应的entry字段之间的space在增长。
如何实现标签靠近对应的输入框?
Python Version is: Python 3.7.5
Wx Version is: 4.0.6 gtk3 (phoenix) wxWidgets 3.0.4
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 1, wx.EXPAND|wx.BOTTOM,10)
确实会处理这个问题,但是因为我将它们的相对权重都设置为 1,所以生成的框的大小也相同。
为了解决这个问题,我只需要将文本框的权重更改为更大的值,例如:
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 3, wx.EXPAND|wx.BOTTOM,10)
结果如下所示:
美好的一天, 我正在使用 wxPython 并且想要一些文本输入,就像在这个示例中一样:
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title)
self.CreateStatusBar() # A Statusbar in the bottom of the window
#Input Fields
inputsdict = { 0:"A",
1:"B",
2:"C"
}
defaultvalue= { 0:"Some Text",
1:"Some Text",
2:"Some Text"
}
# the edit control - one line version.
#self.paralbl = wx.StaticText(self, label="Filter Parameters")
self.entryboxes = wx.BoxSizer(wx.VERTICAL)
self.entrys=[]
for item in inputsdict:
self.lblname = wx.StaticText(self, label=inputsdict[item])
self.entrys.append(wx.TextCtrl(self,value=defaultvalue[item]))
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 1, wx.EXPAND|wx.BOTTOM,10)
self.Bind(wx.EVT_TEXT, self.EvtText, self.entrys[item])
self.Bind(wx.EVT_CHAR, self.EvtChar, self.entrys[item])
#Layout
# Use some sizers to see layout options
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.sizer.Add(self.entryboxes, 2,wx.EXPAND)
#Layout sizers
self.SetSizer(self.sizer)
self.SetAutoLayout(1)
self.sizer.Fit(self)
self.Show()
def EvtChar(self, event):
pass
def EvtText(self, event):
pass
FilterTool = wx.App(False) # Create a new app, don't redirect stdout/stderr to a window.
wnd = MainWindow(None, "Input Field Sample") # A Frame is a top-level window.
FilterTool.MainLoop()
结果如下所示:
这几乎就是我想要的,但请注意,标签比它们所指的更靠近它们上方的输入字段。 我希望,那:
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 1, wx.EXPAND|wx.BOTTOM,10)
在条目的底部添加一个边框,并将标签和条目字段之间的边框设置为 0,以便它们相互接触。但是只要一般的displayspace没有溢出,只是label和对应的entry字段之间的space在增长。
如何实现标签靠近对应的输入框?
Python Version is: Python 3.7.5
Wx Version is: 4.0.6 gtk3 (phoenix) wxWidgets 3.0.4
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 1, wx.EXPAND|wx.BOTTOM,10)
确实会处理这个问题,但是因为我将它们的相对权重都设置为 1,所以生成的框的大小也相同。 为了解决这个问题,我只需要将文本框的权重更改为更大的值,例如:
self.entryboxes.Add(self.lblname, 1, wx.EXPAND|wx.ALL,0)
self.entryboxes.Add(self.entrys[item], 3, wx.EXPAND|wx.BOTTOM,10)
结果如下所示: