Я не могу понять, что я делаю неправильно. Я просто сделал прыжок с Tkinter на wxPython, и я пытаюсь выяснить BoxSizers. Я бы посмотрел на этот вопрос, но я даже не знаю, что посмотреть. Эта панель заполняет пространство кадра, оно должно показывать строку текста с панелью прогресса под ним, и все это должно занять нижнюю 1/5 панели или около того, с центром по горизонтали (в конце концов я собираюсь добавьте фоновое изображение за ним). Но что происходит, я вижу только текст и только около 40% вниз, выровненный по левому краю окна. Вот код:wxPython - BoxSizer неправильно размещает вещи
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 и высота, ширина и высота родительского окна (в настоящее время 340 х 270). И selectWindow, в данном случае, является «configWindow»
Вы правы, это была проблема. Я сделал то же самое для topBuffer и itemSep, и теперь они тоже работают, хотя у меня все еще есть какая-то настройка, так как индикатор прогресса заканчивается сверху, и я не уверен, почему и виджеты не центрированы по горизонтали, что я и думал ALIGN_CENTER сделал. Ahh хорошо, я могу суетиться с ними. Почему Python нуждается в .0 в конце целых чисел? Говорит ли .0, что ответ будет плавающей точкой? Правило №1 отладки: проверьте свои переменные - извлеченный урок в 500-й раз. Благодаря! – linus72982
Да, это говорит Python использовать деление с плавающей запятой. Вы можете включить деление с плавающей запятой по умолчанию, используя 'from __future__ import division' - http://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python , Вы можете найти эту статью полезной для центрирования виджетов - http://www.blog.pythonlibrary.org/2015/02/19/wxpython-101-how-to-center-a-widget/ –