[TOC]
# Module Structure
PAGE生成兩個模塊,即GUI模塊和支持模塊。 第一個包含將GUI窗口放到計算機屏幕上所需的所有Python代碼。 在PAGE世界中,GUI模塊是不可編輯的。 它包含到支持模塊的所有必需鏈接。 通常,它是應用程序的主要模塊。
支持模塊以骨架形式生成,是構建應用程序的框架。 這是用戶編寫的代碼所在的位置。 因此,它很少生成或被PAGE取代。 實際上,分離是返工的秘訣。 它可以在保留用戶代碼的同時更改GUI窗口的內容和外觀。
生成模塊時,它們會顯示在Python控制臺中,但不會自動保存。 這使用戶有機會檢查代碼并決定是否保存。 PAGE生成模塊時,它將使用四個空格進行縮進。 PAGE保存模塊時,空格將另存為空格。
## Project Directory
包含與PAGE相關聯的各種文件的目錄稱為項目目錄。 它包含項目文件,生成的Python模塊,與窗口小部件一起使用的任何圖像文件以及任何應用程序支持模塊。
讓我將項目目錄稱為“ proj_dir”,因為它很精確并且對應于內部PAGE變量。 proj_dir設置有幾種方法:
* 如果執行PAGE時不帶參數,則proj_dir設置為當前工作目錄。
* 如果使用參數調用PAGE,則proj_dir設置為連接到參數目錄部分的當前工作目錄。
* 如果保存了用PAGE創建的GUI設計,則目標目錄將成為proj_dir。
* 如果打開了項目文件,則源目錄將成為proj_dir。
當小部件具有圖像屬性時,這一點很重要。 為了使這種情況合理合理,PAGE要求與此類小部件關聯的所有圖像文件在指定小部件之前都位于proj_dir或其子目錄中。
我建議在執行PAGE之前,創建一個目錄并將該目錄作為當前工作目錄。 在開始GUI開發之前不必包含圖像文件,而在小部件指定非空白圖像屬性之前需要包含圖像文件。 同樣,您可以添加可能包含圖像的窗口小部件,但是必須在指定圖像屬性之前包含圖像文件。
## GUI Module
GUI模塊的主要功能是類定義,它定義了一個GUI窗口。 它定義了頂層窗口以及所有包含的窗口小部件。 請注意,它在支持模塊中將所有回調函數都稱為函數,而Tk變量(例如textvariables)在支持模塊中被稱為Tk變量。
GUI模塊包含兩個用于實例化窗口類的樣式化函數。 第一個是:
~~~
def vp_start_gui():
'''模塊作為主要例程的起點.'''
global val, w, root
root = Tk()
top = New_Toplevel_1 (root)
fnew_support.init(root, top)
root.mainloop()
~~~
這是將例程作為應用程序的主例程啟動時的入口點,如模塊底部所示:
~~~
if __name__ == '__main__':
vp_start_gui()
~~~
函數vp_start_gui的主要功能是它初始化Tk并建立Tkinter主循環。 請注意,支持模塊中的init函數傳遞給GUI窗口類的指針。
另一個功能是:
~~~
def create_New_Toplevel_1(root, *args, **kwargs):
'''模塊被另一個程序導入的起點'''
global w, w_win, rt
rt = root
w = Toplevel (root)
top = New_Toplevel_1 (w)
fnew_support.init(w, top, *args, **kwargs)
return (w, top)
~~~
例如,如果需要在主GUI中觸發某些輔助GUI(例如進度條),則從正在運行的應用程序中的代碼中調用ate GUI窗口時,這是入口點。 注意,它不會調用Tk()也不啟動主循環。 您只想要其中之一。 重要的一點是,以靈活性的名義向init函數傳遞了一個變量參數列表。 它還將傳遞一個指向GUI窗口的指針。 這樣做是為了使用戶可以在其支持模塊中關閉創建的窗口,而不會關閉影響應用程序中的其他窗口。
## Support Module
該模塊位于應用程序的手工編碼部分。 顯然,PAGE只能為應用程序準備框架。 PAGE知道的是,(1)GUI模塊和支持模塊之間的鏈接,(2)要位于支持模塊中的回調函數,以及(3)要在支持模塊中操作的Tk變量。
對于模塊之間的鏈接主要是init函數。
~~~
def init(top, gui, *args, **kwargs):
global w, top_level, root
w = gui
top_level = top
root = top
~~~
在這里PAGE僅產生了最低要求。 它設置全局變量,該全局變量引用GUI窗口的根,而w指向由相應的GUI模塊創建的GUI窗口。 后者允許用戶更改GUI窗口以及該窗口中包含的窗口小部件的配置。 例如,如果GUI窗口中有一個按鈕(Button1),則只需使用以下代碼即可在支持模塊中的任何位置更改顏色:
~~~
w.Button1.configure(color='red')
~~~
同樣,如果有模塊或例程的層次結構從支持模塊流出,則可以傳遞和操縱對GUI窗口的引用。
為回調函數生成的代碼更加簡單:
~~~
def callback():
print('unknown_support.callback')
sys.stdout.flush()
~~~
為Tk變量kkkk生成的代碼如下:
~~~
def set_Tk_var():
# 這些是傳遞給Tkinter的Tk變量
# 必須在創建使用它們的窗口小部件之前進行定義
global kkkk
kkkk = StringVar()
~~~
這樣生成的代碼被生成為使得GUI模塊和支持模塊將是可執行對。 也就是說,即使沒有添加其他應用程序代碼,也可以執行GUI模塊并查看其外觀。 如果GUI調用了回調(例如通過按鈕選擇),程序將告訴您它已被調用。 現在您有了準備,開始編程。
如果在編寫了大量的應用程序代碼之后發現在GUI模塊中需要附加的小部件,該怎么辦? 該怎么辦?
首先使用項目名稱調用PAGE,添加具有所有配置的小部件,包括回調和Tk變量。 然后像以前一樣為GUI模塊生成Python代碼。 您確定不想重新構建支持模塊并擦除所有手碼。 因此,當您告訴PAGE生成支持模塊時,它將為您提供更新現有支持模塊的選項。 如果選中,PAGE將僅為新的回調添加框架并添加新的Tk變量。 此外,如果出現故障或PAGE錯誤,它將備份模塊的先前版本。 等等。PAGE將使備份保持在首選項中指定的深度。 請參閱[備份首選項](preferences.md).
為方便起見,在支持模塊的底部添加了以下代碼,以幫助調試。 如果您正在調試支持模塊并想要測試其執行情況,則只需執行它即可,它不會首先通過調用支持模塊中的功能,而是通過GUI模塊中的主要功能來啟動。 我發現它特別有用,因為我是在emacs中進行開發的,在那里我有一個按鍵綁定,它將調用python來執行當前緩沖區。
~~~
if __name__ == '__main__':
import bind_example
bind_example.vp_start_gui()
~~~
[具有多個頂層Windows的應用程序](use.md)中進一步探討了其中一些功能。
- 介紹
- 更新記錄
- 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的應用程序
- 修改光標
- 使用圖像
- 動態組件
- 菜單
- 重建
- 自動更新支持模塊
- 重用
- 模板
- 從現有項目中借用組件
- 范例
- 結語