wxPython - Notebook 類



wxPython 類庫包含各種“book”控制元件。book 控制元件允許使用者在框架中的各個面板之間切換。當需要呈現大量資料時,這尤其有用。

Book 類繼承自wx.BookCtrlBase類。以下型別的 book 控制元件可用:

  • wx.Notebook
  • wx.Choicebook
  • wx.Listbook
  • wx.Treebook

wx.Notebook 小部件呈現一個選項卡式控制元件。框架中的一個 Notebook 物件具有一個或多個選項卡(稱為頁面),每個選項卡都有一個面板顯示控制元件的佈局。使用者可以透過點選相應的選項卡標題在頁面之間切換。

Notebook 類的建構函式採用以下熟悉的引數:

wx.Notebook(parent, id, pos, size, style)

以下樣式引數可用於自定義小部件:

序號 引數及說明
1

wx.NB_TOP

將選項卡放置在頂部

2

wx.NB_LEFT

將選項卡放置在左側

3

wx.NB_RIGHT

將選項卡放置在右側

4

wx.NB_BOTTOM

將選項卡放置在 Notebook 頁面的下方,而不是上方

5

wx.NB_FIXEDWIDTH

所有選項卡都將具有相同的寬度

6

wx.NB_MULTILINE

可以有多行選項卡

Notebook 類的成員函式:

序號 函式及說明
1

OnSelChange()

頁面選擇更改時呼叫的處理程式函式

2

SetPadding()

設定每個頁面圖示和標籤周圍的空間量(以畫素為單位)

3

GetSelection()

返回當前選擇的頁面

4

SetSelection()

將選擇設定為給定的頁面,並返回之前的選擇

5

AddPage()

新增一個新頁面

6

DeletePage()

刪除給定索引的頁面

7

InsertPage()

在給定索引處插入一個新選項卡

8

RemovePage()

刪除頁面但不刪除內容

為該類定義的事件繫結器:

序號 事件及說明
1

EVT_NOTEBOOK_PAGE_CHANGED()

頁面選擇已更改

2

EVT_NOTEBOOK_PAGE_CHANGING()

頁面選擇即將更改

示例

以下示例在頂級框架中部署 Notebook 控制元件。

nb = wx.Notebook(self) 

設計了兩個基於 wx.Panel 的類。第一個在其內放置一個多行 TextCtrl。

class MyPanel1(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel1, self).__init__(parent) 
      text = wx.TextCtrl(self, style = wx.TE_MULTILINE, size = (250,150))

第二個顯示一個具有三個單選按鈕的 RadioBox。

class MyPanel2(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel2, self).__init__(parent) 
      lblList = ['Value X', 'Value Y', 'Value Z']         
      rbox = wx.RadioBox(self, label = 'RadioBox', pos = (25,10), choices = lblList,
         majorDimension = 1, style = wx.RA_SPECIFY_ROWS)

這兩個面板類的物件作為頁面新增到頂級框架上的 Notebook 中。

nb.AddPage(MyPanel1(nb),"Editor") 
nb.AddPage(MyPanel2(nb),"RadioButtons")

完整的程式碼如下:

import wx
  
class MyDialog(wx.Dialog): 
   def __init__(self, parent, title): 
      super(MyDialog, self).__init__(parent, title = title, size = (250,150)) 
      panel = wx.Panel(self) 
      self.btn = wx.Button(panel, wx.ID_OK, label = "ok", size = (50,20), pos = (75,50)) 
     
class Mywin(wx.Frame): 
            
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title, size = (250,150))  
      self.InitUI() 
         
   def InitUI(self):    
      nb = wx.Notebook(self) 
      nb.AddPage(MyPanel1(nb),"Editor") 
      nb.AddPage(MyPanel2(nb),"RadioButtons") 
      self.Centre() 
      self.Show(True) 
		
class MyPanel1(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel1, self).__init__(parent) 
      text = wx.TextCtrl(self, style = wx.TE_MULTILINE, size = (250,150)) 
		
class MyPanel2(wx.Panel): 
   def __init__(self, parent): 
      super(MyPanel2, self).__init__(parent) 
      lblList = ['Value X', 'Value Y', 'Value Z']         
      rbox = wx.RadioBox(self, label = 'RadioBox', pos = (25,10), choices = lblList,
         majorDimension = 1, style = wx.RA_SPECIFY_ROWS) 
     
ex = wx.App() 
Mywin(None,'NoteBook demo') 
ex.MainLoop()

以上程式碼產生以下輸出:

Notebook Demo Output
wxpython_major_classes.htm
廣告
© . All rights reserved.