wxpython筆記:Wxpython pannel切換


 

 

演示效果

 

 

實現panel切換思路

1.創建所有在某個區域需要切換面板對象,設置為None

self.panel_Celan1 = None
self.panel_Celan2 = None
self.panel_Celan3 = None
self.panel_Celan1_1 =None

2.我們要實現切換,就是刪除在這個位置的其他panel,然后創建顯示你想要顯示的panel。

我們以側欄第二個按鈕為例:

我們想要顯示self.panel_Celan2,而在這個位置可能存在self.panel_Celan1,self.panel_Celan3,self.panel_Celan1_1,

對於self.panel_Celan1,self.panel_Celan3,self.panel_Celan1_1這些panel,全部需要判斷,如果存在,則刪除,如果不存在,我們就不需要操作

而我們需要切換顯示的panel只需要在不存在的時候創建即可,因為你一直點擊同一個按鈕,已經創建panel,不需要再次創建panel。

        if event.GetEventObject()==self._caidan2:
            # 如果需要顯示的地方存在其他面板,刪除
            if self.panel_Celan1:
                self.panel_Celan1.Destroy()
            if self.panel_Celan1_1:
                self.panel_Celan1_1.Destroy()
            if self.panel_Celan3:
                self.panel_Celan3.Destroy()
            if not self.panel_Celan2 :
                self.panel_Celan2 = wx.Panel(self, pos=(200, 0), size=(700, 700))

 

 

源碼

#!/usr/bin/env python

'''
靜態文本、可控文本、對話框、GetApp()
'''
import wx,time
ID_EXIT=200
ID_ABOUT=201

class Frame(wx.Frame): #2 wx.Frame子類
    def __init__(self,parent = None,id = -1,title ='系統管理界面'):
        wx.Frame.__init__(self,parent,id,title,size=(900,600))
        self.panel_Celan1 = None
        self.panel_Celan2 = None
        self.panel_Celan3 = None
        self.panel_Celan1_1 =None
        self.setupStatusBar()
        self.InitCelan()
        self.InitButton()


    #初始化狀態欄
    def setupStatusBar(self):
        # 狀態欄
        sb = self.CreateStatusBar(2)  # 2代表將狀態欄分為兩個
        self.SetStatusWidths([-1, -2])  # 比例為1:2
        self.SetStatusText("Ready", 0)  # 0代表第一個欄,Ready為內容
        # timmer
        self.timer = wx.PyTimer(self.Notify)
        self.timer.Start(1000, wx.TIMER_CONTINUOUS)
        self.Notify()

    # 實時顯示時間
    def Notify(self):
        t = time.localtime(time.time())
        st = time.strftime('%Y-%m-%d %H:%M:%S', t)
        self.SetStatusText(st, 1)  # 這里的1代表將時間放入狀態欄的第二部分上


    # 初始化登陸
    def InitButton(self):
        self.panel_Celan1 = wx.Panel(self, pos=(400, 150), size=(300, 300))
        wx.StaticText(self.panel_Celan1,label="Username",pos=(20,20))
        wx.StaticText(self.panel_Celan1, label="Password", pos=(20, 50))
        self._username=wx.TextCtrl(self.panel_Celan1,pos=(110,15))
        self._passwd = wx.TextCtrl(self.panel_Celan1, pos=(110, 45),style=wx.TE_PASSWORD)

        self._submit_btn=wx.Button(self.panel_Celan1,label=u'提交',pos=(100,100),size=(50,30))
        self.panel_Celan1.Bind(wx.EVT_BUTTON,self.Onclick,self._submit_btn)


    #處理登陸事件
    def Onclick(self,event):
        global denglu_flag
        if event.GetEventObject()==self._submit_btn:
            user = self.GetUsername()
            passwd = self.GetPasswd()
            print(user+":"+passwd)
            if(user == "wenli"and passwd == "123456"):
                denglu_flag=True
                self.panel_Celan1.Destroy()
                self.panel_Celan1_1 =wx.Panel(self, pos=(400, 150), size=(300, 300))
                wx.StaticText(self.panel_Celan1_1, label="歡迎登陸", pos=(130, 150))
    def GetUsername(self):
        return self._username.GetValue()

    def GetPasswd(self):
        return self._passwd.GetValue()


    #初始化側欄
    def InitCelan(self):
        self.panel_Celan = wx.Panel(self, pos=(0, 0), size=(200, 800))  # 創建側欄畫板 
        self._background = wx.Image("background.jpg",type = wx.BITMAP_TYPE_ANY,)
        self._background = self._background.Rescale(200,150) #改變圖像大小
        wx.StaticBitmap(self.panel_Celan,-1,wx.BitmapFromImage( self._background)) #顯示圖像
        self._caidan1 = wx.Button(self.panel_Celan, label=u'用戶信息', pos=(0, 150), size=(200, 30))
        self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan1)
        self._caidan2 = wx.Button(self.panel_Celan, label=u'圖書館大廳', pos=(0, 180), size=(200, 30))
        self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan2)
        self._caidan3 = wx.Button(self.panel_Celan, label=u'公告', pos=(0, 210), size=(200, 30))
        self.panel_Celan.Bind(wx.EVT_BUTTON, self.Onclick_Ce, self._caidan3)

    #處理側欄的點擊事件
    def Onclick_Ce(self,event):
        global denglu_flag
        if event.GetEventObject() == self._caidan1:
            # 如果需要顯示的地方存在其他面板,刪除
            if self.panel_Celan2:
                 self.panel_Celan2.Destroy()
            if self.panel_Celan3:
                self.panel_Celan3.Destroy()
            if not self.panel_Celan1 :
                if(denglu_flag == False):
                    self.InitButton()
                else:
                    if not self.panel_Celan1_1:
                        self.panel_Celan1_1 = wx.Panel(self, pos=(400, 150), size=(300, 300))
                        wx.StaticText(self.panel_Celan1_1, label="歡迎登陸", pos=(130, 150))


        if event.GetEventObject()==self._caidan2:
            # 如果需要顯示的地方存在其他面板,刪除
            if self.panel_Celan1:
                self.panel_Celan1.Destroy()
            if self.panel_Celan1_1:
                self.panel_Celan1_1.Destroy()
            if self.panel_Celan3:
                self.panel_Celan3.Destroy()
            if not self.panel_Celan2 :
                self.panel_Celan2 = wx.Panel(self, pos=(200, 0), size=(700, 700))

        if event.GetEventObject() == self._caidan3:
            if self.panel_Celan1:
                self.panel_Celan1.Destroy()
            if self.panel_Celan1_1:
                self.panel_Celan1_1.Destroy()
            if  self.panel_Celan2 :
                self.panel_Celan2.Destroy()
            if not self.panel_Celan3:
                self.panel_Celan3 = wx.Panel(self, pos=(400, 150), size=(300, 300))
                wx.StaticText(self.panel_Celan3, label="公告", pos=(130, 150))


class App(wx.App): #5 wx.App子類
    def __init__(self):
    #如果要重寫__init__,必須調用wx.App的__init__,否則OnInit方法不會被調用
        wx.App.__init__(self)
    def OnInit(self):
        self.frame=Frame()
        self.SetTopWindow(self.frame)
        self.frame.Show()

        return True
if __name__=="__main__":
    denglu_flag = False
    app = App()
    app.MainLoop()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM