我正在写一个初级的行程经理。只是一个简单的侧面项目,熟悉使用wxPython创建GUI。这是我的第一次尝试,我似乎无法在其他地方找到任何对此问题的引用。
我的代码如下:
import wx
class mainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(650, 1000))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
topLabel = wx.StaticText(panel, size = (-1, -1), label="Itinerary")
vbox.Add(topLabel, 1, wx.EXPAND)
self.listBox = wx.ListCtrl(panel, style = wx.LC_LIST)
self.listBox.InsertColumn(0, "Test Column")
self.listBox.Append(["This is an item"])
self.listBox.Append(["This is another item"])
vbox.Add(self.listBox, 1, wx.EXPAND | wx.ALL, 20)
panel.SetSizer(vbox)
self.Show(True)
app = wx.App(False)
frame = mainWindow(None, "Itinerary Manager")
app.MainLoop()
由于某种原因,这导致顶部的StaticText元素和它下面的ListCtrl之间存在巨大的差距。我尝试了一些解决方法,包括将每个的父级设置为self,但是它提供了相同的输出。我该怎么做才能确保这两个控件之间没有(或非常小)的边距?
答案 0 :(得分:1)
问题是你告诉wx.StaticText
控件扩展并占用应用程序宽度的一半。你不想要那个。因此,改变第13行:
vbox.Add(topLabel, 1, wx.EXPAND)
到此:
vbox.Add(topLabel, 0, wx.ALL, 5)
数字1告诉wxPython小部件应该占多大比例。由于静态文本和列表框都设置为1,因此它们各自占用的数量完全相同。大多数情况下,静态文本控件不应该扩展。无论如何,这里是完整的代码:
import wx
class mainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(650, 1000))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
topLabel = wx.StaticText(panel, size = (-1, -1), label="Itinerary")
vbox.Add(topLabel, 0, wx.ALL, 5)
self.listBox = wx.ListCtrl(panel, style = wx.LC_LIST)
self.listBox.InsertColumn(0, "Test Column")
self.listBox.Append(["This is an item"])
self.listBox.Append(["This is another item"])
vbox.Add(self.listBox, 1, wx.EXPAND | wx.ALL, 20)
panel.SetSizer(vbox)
self.Show(True)
app = wx.App(False)
frame = mainWindow(None, "Itinerary Manager")
app.MainLoop()