2017-01-07 14 views
0

フォルダにリストされているPDFファイルをサムネイルとして表示するコードを作成しようとしていますが、私は何をしようとしているのかを示すイメージ(URLは以下)を持っています。達成する。私は理解してwxpythonファイルのサムネイルビュー

https://scottiestech.info/wp-content/uploads/2012/10/unhappy_thumbnails.jpg

はこのために解決しThumbnailctrlウィジェットがあるが、私は、これは、wx.buttonなどwx.panelで達成することができるかどうかを確認するためにwidget..andを使用しないようにしようとしています。..

私はラフなコードを持っていますが、何もウィンドウ内の1つのように表示されていないようにみえ、助けtoo..pleaseテキストをラップ厳しい時間を過ごしました。..

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, size=(150,150)) 

     self.rootPanel = wx.Panel(self) 

     innerPanel = wx.Panel(self.rootPanel,-1, size=(150,150), style=wx.ALIGN_CENTER) 
     innerPanel.SetBackgroundColour('WHITE') 
     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     vbox = wx.BoxSizer(wx.VERTICAL) 
     innerBox = wx.BoxSizer(wx.VERTICAL) 

     buttonLabel = "Two this text was long so hence it was decided\n".center(5) + "Fox jumped over the river".center(5) 
     txt = wx.StaticText(innerPanel, id=-1, label=buttonLabel,style=wx.ALIGN_CENTER, name="") 
     bmp = wx.Bitmap("lion.jpg", wx.BITMAP_TYPE_ANY) 
     button = wx.BitmapButton(innerPanel, id=wx.ID_ANY, bitmap=bmp,size=(bmp.GetWidth()+10, bmp.GetHeight()+10)) 
     innerBox.AddSpacer((150,75)) 
     innerBox.Add(txt, 0, wx.CENTER) 
     innerBox.AddSpacer((150,75)) 
     innerPanel.SetSizer(innerBox) 

     hbox.Add(innerPanel, 0, wx.ALL|wx.ALIGN_CENTER) 
     vbox.Add(hbox, 1, wx.ALL|wx.ALIGN_CENTER, 5) 

     self.rootPanel.SetSizer(vbox) 
     vbox.Fit(self) 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'wxBoxSizer.py') 
     frame.Show(True) 
     frame.Center() 
     return True 

app = MyApp(0) 
app.MainLoop() 
+0

wxPythonのデモは、イメージのあるリストボックスのタイプによって異なりますか?おそらくそれらのいくつかを使用します。 – Dalen

+0

私はそれらを見てみましたが、ファイルを一覧表示するためにリストブックの部分だけを使用することは可能ですか?クリックしたリストボックの項目ごとにカウンタパネルが必要ですか?また、「Ultimate List Ctrl」ウィジェットで「wx.LC_ICON style」を見て、これが最も近いものかもしれませんが、wxPythonを初めて使っているので、これがうまくいくかどうかわかりません。 –

+0

はい、そうすべき。選択したリストボックスはいつでも継承することができ、必要に応じて見た目を少し変更することができます。原則はカスタマイズされたダイアログと同じです。 – Dalen

答えて

1

あなたがウィジェットのサイズを設定すると、 size=のパラメータコンストラクタの呼び出しでは、項目の最小サイズも設定されます。最小サイズが設定されている場合、サイザーのアイテムの最適サイズの計算が上書きされます。したがって、最初のステップは、サンプルコードでsize=(150,150)の2つのインスタンスを削除することです。

次の問題は、ビットマップボタンをinnerBoxサイザに追加しないことです。ボタンのレイアウトは決して管理されないため、静的テキストと重複します。

最後に、Widget Inspection Toolを使用すると、このようなレイアウトの問題のデバッグに非常に役立ちます。

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title) 

     self.rootPanel = wx.Panel(self) 

     innerPanel = wx.Panel(self.rootPanel,-1, style=wx.ALIGN_CENTER) 
     innerPanel.SetBackgroundColour('WHITE') 
     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     vbox = wx.BoxSizer(wx.VERTICAL) 
     innerBox = wx.BoxSizer(wx.VERTICAL) 

     buttonLabel = "Two this text was long so hence it was decided\n".center(5) + "Fox jumped over the river".center(5) 
     txt = wx.StaticText(innerPanel, id=-1, label=buttonLabel,style=wx.ALIGN_CENTER, name="") 
     bmp = wx.Bitmap("pawprints.jpg", wx.BITMAP_TYPE_ANY) 
     button = wx.BitmapButton(innerPanel, id=wx.ID_ANY, bitmap=bmp,size=(bmp.GetWidth()+10, bmp.GetHeight()+10)) 
     innerBox.AddSpacer((150,75)) 
     innerBox.Add(txt) 
     innerBox.Add(button) 
     innerBox.AddSpacer((150,75)) 
     innerPanel.SetSizer(innerBox) 

     hbox.Add(innerPanel, 0, wx.ALL|wx.ALIGN_CENTER) 
     vbox.Add(hbox, 1, wx.ALL|wx.ALIGN_CENTER, 5) 

     self.rootPanel.SetSizer(vbox) 
     vbox.Fit(self) 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'wxBoxSizer.py') 
     frame.Show(True) 
     frame.Center() 
     return True 

app = MyApp(0) 
import wx.lib.inspection 
wx.lib.inspection.InspectionTool().Show() 
app.MainLoop()