<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 8.4.1 將 GUI 應用程序封裝成對象 GUI 編程的一個常用技術是將整個應用程序封裝成一個類,在應用程序類中建立圖形界 面并處理各種交互事件。具體來說,GUI 應用程序類應該首先創建一個主窗口,并在其中布 置所需的各種構件,然后再為各個構件編寫事件處理程序(都是類的方法)。這種做法的好處 是:由于事件處理函數都定義為應用類的方法,而類的方法很自然地能訪問類中的實例變量, 所以只要我們將界面中的各種構件也存儲為實例變量,就能實現程序的處理代碼與程序的圖 形界面進行“無縫集成”。 在用 Tkinter 編程時,根據需要可以有多種方式來建立程序主窗口: (1)在應用程序類中創建自己的根窗口,即程序自成體系。代碼大致形如: ``` class MyApp: def __init__ (self): root = Tk() b = Button(root,...) ... root.mainloop() app = MyApp() ``` (2)程序主窗口是程序類外部的某個窗口的子構件,該外部窗口在創建程序實例時作為 參數傳遞給構造器。例如: ``` class MyApp: def __init__ (self,master): f = Frame(master,...) b = Button(f,...) ... root = Tk() app = MyApp(root) root.mainloop() ``` (3)將應用程序類定義為框架構件類的子類,即程序就是窗口,窗口就是程序。如: ``` class MyApp(Frame): def __init__ (self): Frame. __init__ (self) # 先用父類的構造器進行初始化 b = Button(self,...) ... app = MyApp() app.mainloop() ``` 在應用程序類的設計中,如果一個構件具有“全局性”,即多個方法都要訪問該元素,那 么就需用一個實例變量來存儲(引用)這個構件,因為類的實例變量在所有類方法中都可訪 問,而局部變量只在某一個方法中可見。 作為例子,我們定義一個應用程序類 MyApp,該程序的用戶界面包括窗口、標簽和按鈕。 我們采用上述第一種方式,即程序創建自己的根窗口。根窗口和標簽構件被存儲為實例變量 self.root 和 self.t,以便 MyApp 類的所有方法都能引用它們;兩個按鈕則被存儲為局部變量 b1 和 b2,這樣在其他方法中是不能引用它們的。 【程序 8.11】myapp.py ``` from Tkinter import * class MyApp: def __init__ (self): self.root = Tk() self.root.title("My App") self.t = Label(self.root,text="Spam") self.t.pack() b1 = Button(self.root,text="Play",command=self.changeText) b2 = Button(self.root,text="Quit",command=self.root.quit) b1.pack() b2.pack() self.root.mainloop() self.root.destroy() def changeText(self): if self.t["text"] == "Spam": self.t["text"] = "Egg" else: self.t["text"] = "Spam" app = MyApp() ``` 程序 8.11 定義了類 MyApp,在其構造器 init__中首先創建根窗口 root,然后添加一個 標簽和兩個按鈕。點擊按鈕 b1 時的回調函數是類 MyApp 中自定義的方法 changeText(功能 是改變標簽的文本),點擊 b2 時的回調函數是根窗口的內建方法 quit(退出事件循環)。標簽 構件必須作為實例變量存儲,因為 init 和 changeText 方法都要引用它;而根窗口和兩個按 鈕在本例中既可以作為實例變量存儲,也可以作為局部變量存儲。創建各構件并完成布局之 后進入事件循環,等待處理事件。 類只是一個定義,封裝成類的應用程序如何執行呢?我們通常會為應用程序類定義一個 專門的啟動方法 run,將來創建應用程序對象后通過調用對象的 run 方法來啟動程序功能。本 例中 MyApp 程序對象 app 一經創建就自動進入程序主循環,這是因為我們將所有啟動代碼 包括 mainloop 都放在構造器 init__之中的緣故。程序啟動后,點擊 Play 按鈕可以看到標簽 內容在“Spam”和“Egg”之間切換。點擊 Quit 按鈕將退出事件循環,從而執行 init__的最 后一條語句 root.destroy 關閉根窗口①。 作為練習,讀者可以用上述第二、三種方式來改寫程序 8.11。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看