<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 功能強大 支持多語言、二開方便! 廣告
                tkinter是Python中可用于構建GUI的眾多工具集之一。 # tkinter模塊 ~~~ # 可以使用import tkinter as tk并通過tk.thing去引用其中的內容 from tkinter import * window = Tk() window.mainloop() ~~~ 以上代碼可以顯示一個空白的根窗口。可以將其看成是應用程序的最外層容器,創建其他插件(widget)的時候就需要用到它。如果關閉屏幕上的窗口,則相應的窗口對象就會被銷毀。所有的應用程序都只有一個主窗口;此外,還可以通過TopLevel這個小插件來創建額外的窗口。 **tkinter小插件**包括Button, Canvas, Checkbutton, Entry, Frame, Label, Listbox, Menu, Message, Menubutton, Text, TopLevel等。 ### 可變的變量 在Python中字符串、整數、浮點數以及布爾值都是不可變的,于是tkinter自帶了一些類型;他們可以就地更新,并可以在其值發生變化時通知相關的插件。 **tkinter中的可變類型** | 不可變類型 | 可變類型 | |-----|-----| | int | IntVar | | string | StringVar | | bool | BooleanVar | | double | DoubleVar | # 模型、視圖、控制器 顧名思義,視圖用于把信息顯示給用戶;模型則只是存儲數據;控制器則可以更新應用程序的模型,并進而出發相應的視圖發生變化。 如下例子實現點擊按鈕之后標簽上的計數增加: ~~~ from tkinter import * # The controller. def click(): counter.set(counter.get() + 1) if __name__ == '__main__': # More initialization window = Tk() # The model. counter = IntVar() counter.set(0) # The views. frame = Frame(window) frame.pack() button = Button(frame, text='Click', command=click) button.pack() label = Label(frame, textvariable=counter) label.pack() window.mainloop() ~~~ ### 使用Lambda 如果我們不僅希望能增加counter的值,還希望能降低它的值。則我們需要添加另一個按鈕和另一個控制器函數。代碼如下: ~~~ from tkinter import * # The controller. def click_up(): counter.set(counter.get() + 1) def click_down(): counter.set(counter.get() - 1) if __name__ == '__main__': # More initialization window = Tk() # The model. counter = IntVar() counter.set(0) # The views. frame = Frame(window) frame.pack() button = Button(frame, text='Up', command=click_up) button.pack() button = Button(frame, text='Down', command=click_down) button.pack() label = Label(frame, textvariable=counter) label.pack() window.mainloop() ~~~ 上述實現代碼看起來有點傻,`click_up`和`click_down`做的事情看起來幾乎是一樣的,應該將它們合成一個。這時,我們應該顯示的把counter傳遞給函數,而不是使用全局變量。 ~~~ # The model. counter = IntVar() counter.set(0) # One controller with parameters def click(variable, value): varaible.set(variable.get() + value) ~~~ tkinter要求由按鈕(以及別的插件)出發的控制器函數不能含有參數,目的就是為了以同一種方式去調用它們。我們要做的事情就是:對這個帶有兩個參數的函數進行處理,使其變成一個不帶參數的函數。 一個好一點的做法是使用lambda函數,它使我們能夠創建一個沒有名字的單行函數。 ~~~ from tkinter import * window = Tk() # The model counter = IntVar() counter.set(0) # General controller. def click(var, value): var.set(var.get() + value) # The views. frame = Frame(window) frame.pack() button = Button(frame, text='Up', command=lambda: click(counter, 1)) button.pack() button = Button(frame, text='Down', command=lambda: click(counter, -1)) button.pack() label = Label(frame, textvariable=counter) label.pack() window.mainloop() ~~~ 這段代碼分別為兩個按鈕創建了一個不帶參數的lambda函數,這兩個lambda函數會將正確的值傳進click。 # 樣式 ~~~ from tkinter import * window = Tk() # 字體 button = Button(window, text='hello', font=('Courier', 14, 'bold italic')) # 布局 button.pack(side='left') # 顏色 label = Label(window, text='hello', bg='green', fg='white') label.pack() window.mainloop() ~~~ 控制布局,就可以使用pack,也可以使用grid,但是不能兩者都用。 ~~~ from tkinter import * window = Tk() button = Button(window, text='button1', font=('Courier', 14, 'bold italic')) button.grid(row=0, column=0) label = Label(window, text='label1', bg='green', fg='white') label.grid(row=0, column=1) label = Label(window, text='label2', bg='green', fg='white') label.grid(row=1, column=1) window.mainloop() ~~~ 可以使用rowspan和columnspan設置插件所占據的行數,默認為1。 # 面向對象的GUI 幾乎所有真實的GUI都是以類和對象來建造的:他們講模型、視圖和控制器一起放到一個干凈整潔的包(package)中。例如下面的計數器函數,其模型是Counter類的一個名為`self.state`的成員變量,其控制器是`upClick`和`quitClick`方法。 ~~~ from tkinter import * class Counter: '''A simple counter GUI using object-oriented programming.''' def __init__(self, parent): '''Create the GUI.''' # Framework. self.parent = parent self.frame = Frame(parent) self.frame.pack() # Model. self.state = IntVar() self.state.set(1) # Label displaying current state. self.label = Label(self.frame, textvariable=self.state) self.label.pack() # Buttons to control application. self.up = Button(self.frame, text='up', command=self.upClick) self.up.pack(side='left') self.right = Button(self.frame, text='quit', command=self.quitClick) self.right.pack(side='left') def upClick(self): '''Handle click on 'up' button.''' self.state.set(self.state.get() + 1) def quitClick(self): '''Handle click on 'quit' button.''' self.parent.destroy() if __name__ == '__main__': window = Tk() myapp = Counter(window) window.mainloop() ~~~ 參考資料: 《Python編程實踐》 《Practical Programming An Introduction to Computer Science Using Python》
                  <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>

                              哎呀哎呀视频在线观看