# Custom Widgets
在編寫照片管理器時,我需要使用滾動畫布來顯示照片。我找不到滾動畫布小部件的通用候選對象,但在網絡上發現了幾種可行的變體。因此,我實現了對用戶設計的自定義小部件的支持,這些小部件可以在PAGE中進行操作,但需要用戶提供Python實現。因此,如果我遺漏了某些內容,并且可以想到它的tkinter實現,則PAGE可以處理它。
PAGE將“自定義”小部件顯示為帶有標題“自定義小部件”的文本小部件,并且可以像放置任何其他小部件一樣放置和調整大小。但是,由于尚未在PAGE中定義窗口小部件,因此談論在屬性編輯器中修改屬性是沒有意義的,除了“ variant”是在4.15中新增并在下面進行描述的。在4.15版中,屬性編輯器不顯示其他屬性。所有其他屬性必須在小部件定義代碼中處理。生成的Python將其稱為在支持模塊中定義的類。為了允許在支持模塊完成之前執行GUI,支持模塊中包含以下行:
~~~
Custom = Frame
~~~
然后,用戶使用自己選擇的,將其自定義窗口小部件的代碼作為一個類插入,并在該代碼后加上以下一行:
~~~
Custom = <class_name>
~~~
這就是將您放置在GUI中的小部件與支持模塊中的實現類代碼鏈接起來的魔力。請參閱自定義小部件示例。
當然,自定義窗口小部件的Python實現可以在一個單獨的Python模塊中,該模塊可以導入到支持模塊中。
在版本4.15中,自定義小部件的概念已擴展了兩種方式。首先,現在可以在GUI中包含多個自定義窗口小部件。
其次,在同一個GUI中也可能有不止一種自定義窗口小部件。本質上實現的是一個帶有各種變體的Custom窗口小部件,每個變體都通過單獨的用戶提供的Python實現來實現。為此,PAGE為“自定義”窗口小部件賦予了新屬性“變量”,可以像在其他任何窗口小部件中的任何其他屬性一樣在“屬性編輯器”中對其進行修改。 variant屬性創建一個單獨的名稱,以在GUI模塊中使用,并與單獨的Python小部件實現綁定。如果為屬性指定了值(名稱),則該值將附加到名稱“自定義”后,并且在生成Python代碼時,將使用擴展名作為類名。如果variant屬性留空,則類名將像以前一樣是“ Custom”。例如,如果為項目d中的小部件“ Custom1”指定了變量“ p”,為小部件“ Custom2”指定了變量“ q”,則在GUI模塊“ d.py”中生成了以下幾行:
~~~
self.Custom1 = d_support.Customp(top)
self.Custom1.place(relx=0.35, rely=0.24, relheight=0.16, relwidth=0.21)
self.Custom2 = d_support.Customq(top)
self.Custom2.place(relx=0.42, rely=0.62, relheight=0.16, relwidth=0.21)
~~~
并且在支持模塊“ d_support.py”中生成以下內容:
~~~
Customp = Frame
Customq = Frame
~~~
用戶將名稱“ Custom\_p”和“ Custom\_q”更改為他或她希望使用的自定義窗口小部件類的名稱,并且您已為其使用Python實現。 因此,在GUI中有兩個不同的自定義小部件。 顯然,自定義窗口小部件的數量不限于兩個。
我敦促您仔細查看[ScrolledCheckedListBox]()示例,以查看使用Greg Walters編寫的自定義小部件的絕佳示例。 Greg Walters也編寫了廣泛的自述文件。 此示例有一個自定義小部件和其他幾個PAGE小部件。
將其視為名稱問題。 在上面的代碼段中,Customp是在支持模塊中定義的Class的名稱或同義詞,Custom1是通過執行Customp類創建的對象或實例的名稱。 如果希望在支持模塊中操作Customp實例,則將該實例稱為w.Custom1。
在支持模塊中,該行:
~~~
Customp = Frame
~~~
將類重命名為Frame,以便在生成GUI模塊和支持模塊時可以執行GUI模塊,并且Customp小部件將顯示為框架。 當您開始編寫“真實的”支持模塊以使用自己的“本地”窗口小部件時,可以替換上面的代碼行,或使用以下代碼:
~~~
Customp = Homegrown
~~~
使用兩行代碼都可以,這相當于兩次為Customp分配名稱。 只要確保最后一行緊跟Frame即可。 在導入支持模塊時執行分配,這是在實例化Customp類之前發生的,因此使用了預期的類定義Homegrown。
- 介紹
- 更新記錄
- X Concepts
- Visual Tcl
- 使用PAGE設計范例
- 項目目錄配置
- Python 2 or Python 3
- Python編碼和UTF-8
- 使用PAGE的簡短說明
- PAGE的狀態
- 安裝
- PAGE界面
- 主菜單
- 子菜單
- 組件工具欄
- 屬性編輯器
- 組件樹
- 綁定操作窗口
- 菜單編輯器
- 首選項窗口
- Python控制臺
- 回調窗口
- 應用窗口
- 顏色對話框
- 顏色
- 雙顯示器
- 默認值和首選項
- Preferences Windows
- Color Preferences
- Font Preferences
- 模塊結構
- 風格和主題
- 使用PAGE
- 命名約定
- 概述
- Toplevel Geometry
- 別名
- 氣球幫助-工具提示
- 選擇和修改組件
- 修改組件位置和尺寸
- 鎖定組件
- 填充容器
- 剪切,復制和粘貼
- Stash and Apply - Propagate Widget Options
- 菜單組件
- 回調函數
- 將事件鏈接到回調函數
- 創建綁定
- 為滾動組件創建綁定
- 定義回調函數
- 查看回調
- 指定字體
- Toplevel Widget
- 相對位置
- Tkinter變量類
- Ttk Widgets
- Scrolled Widgets
- Ttk Notebook and PNotebook
- Ttk Panedwindow
- Ttk Treeview
- Entry
- Ttk Entry
- Ttk Combobox
- Radiobuttons
- 文本和變量的奇異性
- Label
- Listbox
- Spinbox
- Scale and TScale
- TSeparator
- Sizegrip
- Custom Widgets
- Canvas
- 生成,檢查和運行Python GUI
- 創建和保存代碼模塊
- 檢查生成的Python模塊
- 執行Python模塊
- 將生成的Python模塊加載到IDE中
- 具有多個頂級Windows的應用程序
- 修改光標
- 使用圖像
- 動態組件
- 菜單
- 重建
- 自動更新支持模塊
- 重用
- 模板
- 從現有項目中借用組件
- 范例
- 結語