Я пытаюсь настроить дисплей, чтобы показать игровой и аватар пользователей, добавленных в текстовый файл, это большая часть пути, но я не могу заставить их правильно позиционировать ,WxPython динамически добавил sizers mis-behaving
Быстрый макет того, что я хочу: here.
Вот что я в настоящее время на старте: here
EDIT: Я перешел от использования BoxSizer с использованием GridSizer и что, кажется, исправили проблему положения, они больше не перекрывают друг друга, проблемы переключения все еще присутствует.
Измеритель, содержащий пользователей, не должен перекрываться с входным устройством в верхней части, я не знаю, что вызывает это.
А что происходит, когда он обновляется, чтобы проверить наличие новых пользователей: here
Может быть не так легко увидеть, но на втором изображении самый низкий пользователь перемещается вниз, она становится все дальше и дальше вниз, как программа выполняется каждый раз, когда он перемещается вниз по собственной высоте.
Соответствующий код направления:
Создание исходных классификаторов
self.main_sizer = wx.BoxSizer(wx.VERTICAL) self.widget_sizer = wx.BoxSizer(wx.VERTICAL) #Holds input for gamertags and addition self.input_sizer = wx.BoxSizer(wx.HORIZONTAL) #Content to be added immediately. self.gamer_tag_textbox = wx.TextCtrl(self, -1) self.gamer_tag_textbox.SetFocus() self.add_gamer_tag = wx.Button(self, -1, 'Add Friend') #Contains the displayed content self.user_sizer = wx.BoxSizer(wx.VERTICAL) #Add objects to sizers self.input_sizer.Add(self.gamer_tag_textbox, 0) self.input_sizer.Add(self.add_gamer_tag, 0) #Set up the sizers self.widget_sizer.Add(self.input_sizer, 0) self.widget_sizer.Add(self.user_sizer, 0) self.main_sizer.Add(self.widget_sizer, 0) self.SetSizer(self.main_sizer)
Добавление классификаторов, созданных для каждого пользователя к основному user_sizer.
def display_user_content(self, details): self.user_sizer.Clear(True) #This is different to the original code, it originally used boxsizers in the for each loop. self.single_user_sizer = wx.GridSizer(cols=2) for each in details: #Create sizer to contain user information #Get username username = each[0] #Get location of image file location = each[-1] #Create static text to contain username stat = wx.StaticText(self, -1, 'username') #Load image from location and convert to bitmap. png = wx.Image(location, wx.BITMAP_TYPE_ANY).ConvertToBitmap() #Create bitmap avatar = wx.StaticBitmap(self, -1, png) #Add to sizer self.single_user_sizer.Add(avatar, 1) self.single_user_sizer.Add(stat, 1) #Add each users sizer to main user sizer self.user_sizer.Add(self.single_user_sizer, 1) #Add main user sizer to widget sizer self.widget_sizer.Add(self.user_sizer, 0) self.frame.Fit()
Полный код (минус классы): here
Это очень трудно понять код, особенно когда я не могу запустить его. Конечно, кто-то может увидеть проблему из рук. Но обычно рекомендуется создать минимальный рабочий пример, который демонстрирует проблему (и только проблему). Для проблем с макетами было бы неплохо, если бы вы могли создать пример только для макета с цветными панелями или что-то (похожее на ваш «быстрый макет»). Тогда было бы намного легче помочь. Также см. Wiki.wxpython.org/MakingSampleApps – Fenikso
BTW: Кажется, что вы ищете sizer, который обрабатывает сетку с строками/столбцами разных размеров. Подумайте об использовании 'wx.GridBagSizer'. – Fenikso