Как проще всего выровнять изображения и кнопки по центру wxpanel по вертикали?

Мой проект — YouTube, и на главной странице есть видео, которые вы можете посмотреть. Видео состоит из миниатюры и кнопки прямо под «Воспроизвести». Я хотел бы иметь панель wxpython, которая сделана так... \image\ button \image\ button и так далее

Изображение в верхней части экрана, расположенное по центру горизонтально, и кнопка прямо под ним. Затем чуть ниже кнопки первого видео изображение, а затем кнопка, и так далее, и тому подобное.

Я пытался смотреть на сайзеры, и я предполагаю, что решение будет включать сайзеры, но мне было трудно понять, как это работает и как я могу использовать его для решения моей проблемы.

Это то, что у меня есть до сих пор (поместив первое изображение в центр по горизонтали)

    self.image = wx.StaticBitmap(self)
    self.image.SetBitmap(wx.Bitmap('icon.png'))
    self.topsizer = wx.BoxSizer(wx.HORIZONTAL)
    self.topsizer.Add(self.image, wx.ALIGN_CENTER_HORIZONTAL)
    self.SetSizer(self.topsizer)
    self.Layout()

person ethan chocron    schedule 21.03.2021    source источник
comment
Бегите с тем, что у вас есть, не забудьте добавить кнопку, но используйте wx.BoxSizer(wx.VERTICAL). Добавить в размер, изображение, кнопку, кнопку изображения... Существует множество BoxSizer руководств.   -  person Rolf of Saxony    schedule 21.03.2021
comment
Может кто-нибудь поделиться кодом?   -  person ethan chocron    schedule 23.03.2021


Ответы (1)


Следует помнить, что люди не могут просто share кодировать, если они не делают того, что пытаетесь сделать вы. Это должно быть написано.
Попробуйте использовать это в качестве отправной точки.
Масштабирование изображения специфично для моих изображений, чтобы сделать их нужного размера.

import wx 
from wx.lib.scrolledpanel import ScrolledPanel

imgs = ['ace.png','2.png','3.png','4.png','5.png']
links = ['https://www.asite.com/ace.mp4', 'https://www.asite.com/2.mp4', 'https://www.asite.com/3.mp4', 'https://www.asite.com/4.mp4', 'https://www.asite.com/5.mp4']

class Example(wx.Frame): 
   
    def __init__(self, parent, title): 
        super(Example, self).__init__(parent, title = title) 
             
        self.InitUI() 
        self.Centre() 
        self.Show()
        
    def InitUI(self): 
        panel = ScrolledPanel(self, wx.ID_ANY)
        panel.SetupScrolling()
        vbox = wx.BoxSizer(wx.VERTICAL) 

        for index, img in enumerate(imgs):
            bmp = wx.Bitmap(img)
            image = bmp.ConvertToImage()
            image.Rescale(70, 100)
            bmp = wx.Bitmap(image)
            video = wx.StaticBitmap(panel, wx.ID_ANY, bmp)
            button = wx.Button(panel, wx.ID_ANY, "Play", name=str(index))
            button.SetToolTip("Play "+links[index])
            vbox.Add(video, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 0) 
            vbox.Add(button, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5) 
            self.Bind(wx.EVT_BUTTON, self.OnPlay, button)
 
        panel.SetSizer(vbox) 

    def OnPlay(self, event): 
        obj = event.GetEventObject()        
        print("Playing ..."+links[int(obj.GetName())])
                  
app = wx.App() 
Example(None, title = 'BoxSizer Demonstration') 
app.MainLoop()

введите здесь описание изображения

person Rolf of Saxony    schedule 23.03.2021
comment
@ethanchocron С удовольствием. stackoverflow.com/help/someone-answers - person Rolf of Saxony; 01.04.2021