Thumbnailctrl 大小(试图让它全屏)

Thumbnailctrl size (trying to get it to fullscreen)

我一直在尝试在 Multisplitter 下插入两个 Thubmnailctrl,我设法把它们放在那里,但我无法让它们占满 space。在 thumbnailctrl.py 我看到它的最大尺寸是 350x280:

def SetThumbSize(self, width, height, border=6):
"""
Sets the thumbnail size as width, height and border.

:param `width`: the desired thumbnail width;
:param `height`: the desired thumbnail height;
:param `border`: the spacing between thumbnails.
"""

if width > 350 or height > 280:
    return

self._tWidth = width 
self._tHeight = height
self._tBorder = border
self.SetScrollRate((self._tWidth + self._tBorder)/4,
                   (self._tHeight + self._tBorder)/4)
self.SetSizeHints(self._tWidth + self._tBorder*2 + 16,
                  self._tHeight + self._tBorder*2 + 8)

但另一方面,在 ThumbnailCtrl 下的演示中,它使用 Splitter 来创建一个你想要的那么大的 Thumbnailctrl,所以我不知道我是否做错了什么(可能是 Sizers)或者是Splitter 的一些功能(与 multisplitter 完全不同)允许 Thumbnailctrl 占据它的全部 space.

Thumbnailctrl + Splitter 演示:

import wx
import os
import sys

try:
    dirName = os.path.dirname(os.path.abspath(__file__))
except:
    dirName = os.path.dirname(os.path.abspath(sys.argv[0]))

sys.path.append(os.path.split(dirName)[0])

try:
    from agw import thumbnailctrl as TC
except ImportError:  # if it's not there locally, try the wxPython lib.
import wx.lib.agw.thumbnailctrl as TC


class MainFrame(wx.Frame):
def __init__(self, redirect=False, filename=None):
    wx.Frame.__init__(self, None, title="Elephant")

    # self.SetMenuBar(self.CreateMenuBar())

    splitter = wx.SplitterWindow(self, -1, style=wx.CLIP_CHILDREN | wx.SP_3D | wx.WANTS_CHARS | wx.SP_LIVE_UPDATE)
    self.panel = wx.Panel(splitter, -1)

    sizer = wx.BoxSizer(wx.HORIZONTAL)
    scroll = TC.ThumbnailCtrl(splitter, -1, imagehandler=TC.NativeImageHandler)

    scroll.ShowFileNames()
    if os.path.isdir("../bitmaps"):
        scroll.ShowDir(os.path.normpath(os.getcwd() + "/../bitmaps"))
    else:
        scroll.ShowDir(os.getcwd())

    self.TC = scroll

    splitter.SplitVertically(scroll, self.panel, 180)

    splitter.SetMinimumPaneSize(140)
    self.SetMinSize((700, 590))
    self.CenterOnScreen()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    # import wx.lib.inspection
    # wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()

我对带有两个缩略图的 Multisplitter 的尝试(以及当第三个带有文本和内容的面板起作用时):

import wx
import os
import cv2
import ctypes
from PIL import Image
from wx.lib.splitter import MultiSplitterWindow

try:
    from agw import thumbnailctrl as TC
except ImportError:  # if it's not there locally, try the wxPython lib.
    import wx.lib.agw.thumbnailctrl as TC


class SamplePane(wx.Panel):
def __init__(self, parent):
    wx.Panel.__init__(self, parent)

    self.thumbnail11 = TC.ThumbnailCtrl(self, imagehandler=TC.NativeImageHandler, thumboutline=4)
    self.thumbnail11.EnableDragging(True)
    # self.thumbnail11.SetThumbSize(350, screensize[0] / 15, 25)  # For images -> Max values 350,280

    # ################VID################ #

    topmostSizer = wx.BoxSizer(wx.VERTICAL)

    topmostSizer.Add(self.thumbnail11, proportion=0, flag=wx.EXPAND)

    self.SetSizer(topmostSizer)
    self.MaxSize
    # topmostSizer.Fit(self)


class MainFrame(wx.Frame):
""""""

    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Elephant")

        splitter = MultiSplitterWindow(self, style=wx.SP_LIVE_UPDATE)
        # t1Sizer = wx.BoxSizer(wx.VERTICAL)
        # self.thumbnail11 = TC.ThumbnailCtrl(splitter, imagehandler=TC.NativeImageHandler, thumboutline=4)
        panel = SamplePane(splitter)
        splitter.AppendWindow(panel)
        panel2 = SamplePane(splitter)
        splitter.AppendWindow(panel2)
        # t1Sizer.Add(panel, proportion=0, flag=wx.EXPAND)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)

    frame = MainFrame()
    # import wx.lib.inspection
    # wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()

如您所见,有两个缩略图,它们从左到右展开,但它们的上限是最大高度。

非常感谢您的帮助!

不能 100% 确定您尝试通过此实现的是什么,但我怀疑您的问题出在 topmostSizerproportion 属性上。
尝试:

topmostSizer.Add(self.thumbnail11, proportion=1, flag=wx.EXPAND)

来自手册:

proportion - Although the meaning of this parameter is undefined in wx.Sizer, it is used in wx.BoxSizer to indicate if a child of a sizer can change its size in the main orientation of the wx.BoxSizer - where 0 stands for not changeable and a value of more than zero is interpreted relative (a proportion of the total) to the value of other children of the same wx.BoxSizer.

在这种情况下,您已将 topmostSizer 定义为 VERTICAL