2017-12-25 103 views
0

私は問題があります:自分自身でパスワードマネージャを作りたいと思います。wxPython動的スクロールパネルの作成方法

私はen /デコードのロジックを持っていますが、パスワードを動的に追加することもできますが、私のマネージャにパスワードをあまりにも多く追加すると、小さい。

スクロールバーを追加したかったが、スクロールバーが機能しませんでした。 数時間の研究の後でさえ、コードは機能したくなかった。これはPanelTwoのコードです:

class PanelTwo(wx.Panel): 
@staticmethod 
def scale_bitmap(bitmap, width, height): 
    image = wx.ImageFromBitmap(bitmap) 
    image = image.Scale(width, height, wx.IMAGE_QUALITY_HIGH) 
    result = wx.BitmapFromImage(image) 
    return result 

def __init__(self, parent): 
    wx.Panel.__init__(self, parent=parent) 

    self.refr = wx.Button(self,wx.ID_ANY,u"Refresh") 
    self.refr.Bind(wx.EVT_BUTTON, self.refresh) 

    self.co = wx.Button(self, wx.ID_ANY, u"Close") 
    self.co.Bind(wx.EVT_BUTTON, self.close) 

    self.number_of_pwds = 0 
    self.frame = parent 

    self.mainSizer = wx.BoxSizer(wx.VERTICAL) 
    controlSizer = wx.BoxSizer(wx.HORIZONTAL) 
    self.widgetSizer = wx.BoxSizer(wx.VERTICAL) 

    #controlSizer.Add(self.Passest, 0, wx.CENTER | wx.ALL, 5) 
    controlSizer.Add(self.refr, 0, wx.CENTER | wx.ALL, 5) 
    controlSizer.Add(self.co, 0, wx.CENTER | wx.ALL, 5) 

    self.addButton = wx.Button(self, label="Add") 
    self.addButton.Bind(wx.EVT_BUTTON, self.onAddWidget) 
    controlSizer.Add(self.addButton, 0, wx.CENTER | wx.ALL, 5) 

    self.removeButton = wx.Button(self, label="Remove") 
    self.removeButton.Bind(wx.EVT_BUTTON, self.onRemoveWidget) 
    controlSizer.Add(self.removeButton, 0, wx.CENTER | wx.ALL, 5) 

    self.mainSizer.Add(controlSizer, 0, wx.CENTER) 
    self.mainSizer.Add(self.widgetSizer, 0, wx.CENTER | wx.ALL, 10) 

    self.SetSizer(self.mainSizer) 

追加や障害者の除去ここにされています。私のメインフォームはここにある

def onAddWidget(self, event): 
    self.number_of_pwds += 1 
    label = "Pwd %s" % self.number_of_pwds 
    name = "Pwd%s" % self.number_of_pwds 
    new_Text = wx.StaticText(self, label=label, name=name) 
    self.widgetSizer.Add(new_Text, 0, wx.ALL, 5) 
    self.frame.fSizer.Layout() 
    self.frame.Fit() 


def onRemoveWidget(self, event): 
    if self.widgetSizer.GetChildren(): 
     self.widgetSizer.Hide(self.number_of_pwds - 1) 
     self.widgetSizer.Remove(self.number_of_pwds - 1) 
     self.number_of_pwds -= 1 
     self.frame.fSizer.Layout() 
     self.frame.Fit() 

class MyForm(wx.Frame): 
def __init__(self): 
    wx.Frame.__init__(self, None, wx.ID_ANY, 
         "Passwort Manager", 
         size=(300,130)) 
    self.panel_one = PanelOne(self) 
    self.panel_two = PanelTwo(self) 
    self.panel_three = PanelThree(self) 
    self.panel_two.Hide() 
    self.panel_three.Hide() 

    self.fSizer = wx.BoxSizer(wx.VERTICAL) 
    self.fSizer.Add(self.panel_one, 1, wx.EXPAND) 
    self.fSizer.Add(self.panel_two, 1, wx.EXPAND) 
    self.fSizer.Add(self.panel_three,1,wx.EXPAND) 
    self.SetSizer(self.fSizer) 
    self.SetBackgroundColour(Color.White) 


def onSwitchPanels(self, event): 

    if self.panel_one.IsShown(): 
     self.SetTitle("Passwort Manager") 
     self.SetBackgroundColour(Color.Random()) 
     self.panel_one.Hide() 
     self.panel_two.Show() 
    elif self.panel_two.IsShown(): 
     self.SetTitle("Passwort Manager") 
     self.SetBackgroundColour(Color.Random()) 
     self.panel_three.Show() 
     self.panel_two.Hide() 
    else: 
     self.SetTitle("Passwort Manager") 
     self.SetBackgroundColour(Color.Random()) 
     self.panel_one.Show() 
     self.panel_three.Hide() 
    self.Layout() 

app = wx.App(False) 
frame = MyForm() 
frame.Show() 
app.MainLoop() 

それでは、どのように私は追加することができます自動的にサイズ変更され、自分のコードで動作する動的なスクロールバー?私はPython3.6を使用しています。

私を助けてくれてありがとう。

+0

問題を再現する最小限の線を提供するために、コードを簡略化したい場合があります。それはテストに役立ちます。 – joaquin

+0

私はevrythingを新しく書く必要がありますか? –

+0

私はこのコードを使おうと思っていましたが、私のコードではうまくいきませんが、すべてのスクリプトを追加することはできません。 –

答えて

0

スクロールパネルを使用しましたか?

import wx 
import wx.lib.scrolledpanel as scrolled 

class TestPanel(scrolled.ScrolledPanel): 

    def __init__(self, parent): 

     scrolled.ScrolledPanel.__init__(self, parent, -1) 

     """ 
     Write your code here... 
     """ 

     self.SetupScrolling() 
関連する問題