我不知道我做错了什么。我刚从Tkinter跳到了wxPython,我正在努力找出BoxSizers。我想查查这个问题,但我甚至不知道该查什么。这个面板填充了一个框架的空间,它应该显示一行文字,在它下面有一个进度条,所有这些都应该占据面板底部的1/5左右,水平居中(最终我将在它后面添加一个背景图像)。但结果是,我只看到文本,只有大约40%从顶部向下,对齐窗口的左边边缘。下面是代码:
class KhPanel(wx.Panel):
def __init__(self, parent, configSet, selectWindow):
wx.Panel.__init__(self, parent=parent)
self.frame = parent
self.configSet = configSet
whichWindow = getattr(self, selectWindow)
whichWindow()
def configWindow(self):
gaugeWidth = (1/5)*self.configSet["width"]
gaugeHeight = (1/10)*self.configSet["height"]
gaugeMax = 100
topBuffer = (8/10)*self.configSet["height"]
itemSep = (1/16)*self.configSet["height"]
vSizer = wx.BoxSizer(wx.VERTICAL)
textSizer = wx.BoxSizer(wx.HORIZONTAL)
progressSizer = wx.BoxSizer(wx.HORIZONTAL)
configText = wx.StaticText(self, label="STUFF", style=wx.ALIGN_CENTER)
configProgressBar = wx.Gauge(self, range=gaugeMax, size=(gaugeWidth, gaugeHeight))
textSizer.Add(configText, 1, wx.ALIGN_CENTER, 0)
progressSizer.Add(configProgressBar, 1, wx.ALIGN_CENTER, 1)
vSizer.Add(textSizer, 1, wx.TOP, topBuffer)
vSizer.Add(progressSizer, 1, wx.TOP, itemSep)
self.SetSizer(vSizer)
vSizer.Fit(self)
return如果您需要信息,configSet.width和高度是父窗口的宽度和高度(当前为340x270)。在这种情况下,selectWindow是"configWindow“
发布于 2015-03-06 17:08:52
运行这段代码时,gaugeWidth和gaugeHeight都被设置为零,这就是为什么没有显示进度条的原因。这是因为你在这里做整数运算,所以1除以5等于0。与1/10相同。只需将这些行更改为:
gaugeWidth = (1/5.0)*self.configSet["width"]
gaugeHeight = (1/10.0)*self.configSet["height"]然后计量器就会出现。下面是一些完全可运行的代码,稍微修改一下无法运行的原始代码:
import wx
class KhPanel(wx.Panel):
def __init__(self, parent, configSet):
wx.Panel.__init__(self, parent=parent)
self.frame = parent
self.configSet = configSet
self.configWindow()
def configWindow(self):
gaugeWidth = (1/5.0)*self.configSet["width"]
gaugeHeight = (1/10.0)*self.configSet["height"]
gaugeMax = 100
topBuffer = (8/10)*self.configSet["height"]
itemSep = (1/16)*self.configSet["height"]
vSizer = wx.BoxSizer(wx.VERTICAL)
textSizer = wx.BoxSizer(wx.HORIZONTAL)
progressSizer = wx.BoxSizer(wx.HORIZONTAL)
configText = wx.StaticText(self, label="STUFF", style=wx.ALIGN_CENTER)
configProgressBar = wx.Gauge(self, range=gaugeMax, size=(gaugeWidth, gaugeHeight))
textSizer.Add(configText, 1, wx.ALIGN_CENTER, 0)
progressSizer.Add(configProgressBar, 1, wx.ALIGN_CENTER, 1)
vSizer.Add(textSizer, 1, wx.TOP, topBuffer)
vSizer.Add(progressSizer, 1, wx.TOP, itemSep)
self.SetSizer(vSizer)
vSizer.Fit(self)
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Test")
config = {'width':340, 'height':270}
panel = KhPanel(self, config)
self.Show()
if __name__ == "__main__":
app = wx.App()
frame = MyFrame()
app.MainLoop()发布于 2015-03-06 18:21:56
结合上面的Mike的修正,我改变了间隔的方式,结果它的工作量减少了。当我发现没有必要的时候,我拿出了水平尺寸,除非我要把两样东西放在同一行上,我增加了伸展间隔,而不是巨大的边框。这是新代码,它看上去就像我想要的那样:
def configWindow(self):
gaugeWidth = (4/5.0)*self.configSet["width"]
gaugeHeight = (1/10.0)*self.configSet["height"]
gaugeMax = 100
vSizer = wx.BoxSizer(wx.VERTICAL)
configText = wx.StaticText(self, label="STUFF")
configProgressBar = wx.Gauge(self, range=gaugeMax, size=(gaugeWidth, gaugeHeight))
vSizer.AddStretchSpacer(7)
vSizer.Add(configText, 1, wx.ALIGN_CENTER, 0)
vSizer.Add(configProgressBar, 1, wx.ALIGN_CENTER, 0)
vSizer.AddStretchSpacer(1)
self.SetSizer(vSizer)
returnhttps://stackoverflow.com/questions/28893930
复制相似问题