簡體   English   中英

wxPython如何制作動態滾動面板

[英]wxPython How to make a dynamic scrolled panel

我有一個問題:我想為自己創建一個密碼管理器。

我完成了編碼/解碼的邏輯,還完成了動態添加密碼的操作,但是如果我向管理員添加了太多密碼,則由於屏幕太小,我將看不到所有密碼。

我想添加滾動條,但是滾動條不起作用。 即使經過數小時的研究,該代碼也無法正常工作。 這是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)

Pwds的添加和刪除在這里:

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。

謝謝你的協助。

您是否嘗試過使用滾動面板?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM