2017-05-16 2 views
0

Ich habe versucht, zwei Thubmnailctrl unter einem Multisplitter einfügen, ich habe es geschafft, sie dort zu setzen, aber ich kann es nicht schaffen, sie ocuppy den vollen Raum. Auf thumbnailctrl.py habe ich, dass auf der die maximale Größe gesehen ist es 350x280 sein kann:Thumbnailctrl Größe (versucht, es auf Vollbild zu bekommen)

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) 

Aber auf der anderen Seite auf der Demo unter ThumbnailCtrl, verwendet es einen Splitter ein Thumbnailctrl so groß wie Sie erstellen Ich weiß nicht, ob ich etwas falsch mache (vielleicht mit Sizer) oder eine Funktion von Splitter (völlig anders als Multisplitter), die es dem Thumbnailctrl erlaubt, seinen vollen Platz einzunehmen.

Thumbnailctrl + Splitter Demo:

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() 

Mein Versuch einer Multisplitter mit zwei Miniaturen (und wenn das funktioniert eine dritte Platte mit Text und Material):

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() 

Wie man dort sehen sind zwei Thumbnails und sie erweitern sich von links nach rechts, aber sie sind auf eine maximale Höhe begrenzt.

Vielen Dank für die Hilfe!

Antwort

1

Nicht 100% sicher, was Sie damit erreichen wollen, aber ich vermute, dass Ihr Problem mit dem 's proportion Attribut ist.
Versuchen:

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

Aus dem Handbuch:

Anteil - wenn ein Kind Obwohl die Bedeutung dieses Parameters in wx.Sizer nicht definiert ist, wird es in wx.BoxSizer verwendet, um anzuzeigen, von Ein Sizer kann seine Größe in der Hauptausrichtung des wx.BoxSizer ändern - wobei 0 für nicht veränderbar steht und ein Wert von mehr als Null relativ (einen Anteil der Summe) zum Wert anderer Kinder von interpretiert wird die gleiche wx.Box Sizer.

In diesem Fall haben Sie topmostSizer als VERTICAL

definiert
Verwandte Themen