2017年8月25日 星期五

python 視窗程式設計1 ---- TKinter DEMO2.py




from tkinter import *
from tkinter.ttk import *

class GUIDemo(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.createWidgets()

    def createWidgets(self):
        self.inputText = Label(self)
        self.inputText["text"] = "Input:"
        self.inputText.grid(row=0, column=0)
        self.inputField = Entry(self)
        self.inputField["width"] = 50
        self.inputField.grid(row=0, column=1, columnspan=6)

        self.outputText = Label(self)
        self.outputText["text"] = "Output:"
        self.outputText.grid(row=1, column=0)
        self.outputField = Entry(self)
        self.outputField["width"] = 50
        self.outputField.grid(row=1, column=1, columnspan=6)
         
        self.new = Button(self)
        self.new["text"] = "New"
        self.new.grid(row=2, column=0)
        self.load = Button(self)
        self.load["text"] = "Load"
        self.load.grid(row=2, column=1)
        self.save = Button(self)
        self.save["text"] = "Save"
        self.save.grid(row=2, column=2)
        self.encode = Button(self)
        self.encode["text"] = "Encode"
        self.encode.grid(row=2, column=3)
        self.decode = Button(self)
        self.decode["text"] = "Decode"
        self.decode.grid(row=2, column=4)
        self.clear = Button(self)
        self.clear["text"] = "Clear"
        self.clear.grid(row=2, column=5)
        self.copy = Button(self)
        self.copy["text"] = "Copy"
        self.copy.grid(row=2, column=6)

        self.displayText = Label(self)
        self.displayText["text"] = "something happened"
        self.displayText.grid(row=3, column=0, columnspan=7)

if __name__ == '__main__':
    root = Tk()
    app = GUIDemo(master=root)
    app.mainloop()

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:tkdemo2.py
# 功能:示範 Python 程式
# 作者:張凱慶

# 時間:西元 2012 年 12 月


源自於
http://www.kaiching.org/2012/12/Python-Basic-Concept-of-GUI.html


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from tkinter import *
 
class GUIDemo(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.createWidgets()
 
    def createWidgets(self):
        self.inputText = Label(self)
        self.inputText["text"] = "Input:"
        self.inputText.grid(row=0, column=0)
        self.inputField = Entry(self)
        self.inputField["width"] = 50
        self.inputField.grid(row=0, column=1, columnspan=6)
 
        self.outputText = Label(self)
        self.outputText["text"] = "Output:"
        self.outputText.grid(row=1, column=0)
        self.outputField = Entry(self)
        self.outputField["width"] = 50
        self.outputField.grid(row=1, column=1, columnspan=6)
         
        self.new = Button(self)
        self.new["text"] = "New"
        self.new.grid(row=2, column=0)
        self.load = Button(self)
        self.load["text"] = "Load"
        self.load.grid(row=2, column=1)
        self.save = Button(self)
        self.save["text"] = "Save"
        self.save.grid(row=2, column=2)
        self.encode = Button(self)
        self.encode["text"] = "Encode"
        self.encode.grid(row=2, column=3)
        self.decode = Button(self)
        self.decode["text"] = "Decode"
        self.decode.grid(row=2, column=4)
        self.clear = Button(self)
        self.clear["text"] = "Clear"
        self.clear.grid(row=2, column=5)
        self.copy = Button(self)
        self.copy["text"] = "Copy"
        self.copy.grid(row=2, column=6)
 
        self.displayText = Label(self)
        self.displayText["text"] = "something happened"
        self.displayText.grid(row=3, column=0, columnspan=7)
 
if __name__ == '__main__':
    root = Tk()
    app = GUIDemo(master=root)
    app.mainloop()
 
# 《程式語言教學誌》的範例程式
# 檔名:tkdemo2.py
# 功能:示範 Python 程式
# 作者:張凱慶
# 時間:西元 2012 年 12 月


GUIDemo 類別直接繼承 (inherit) tkinter 中的 Frame ,繼承是物件導向程式設計 (object-oriented programming language) 的特性之一,使子類別 (subclass) 擁有父類別 (superclass) 的特性,同時子類別可擴充父類別的功能。此例 Frame 為沒有元件的視窗,因此我們可以在 GUIDemo 上加入需要的視窗元件

3
class GUIDemo(Frame):


__init__() 方法 (method) 需要預設參數 master ,這裡先呼叫 Frame 的 __init__()

4
5
6
7
def __init__(self, master=None):
    Frame.__init__(self, master)
    self.grid()
    self.createWidgets()


注意下面呼叫 grid() ,這是繼承自 Frame 的方法,表示我們在這個 GUI 中要使用格子式幾何版面管理 (grid geometry manager) ,最後呼叫的 createWidgets() 則是我們待會用來加入視窗元件的方法。


下面的 createWidgets() 建立共有三個 Label 、兩個 Entry 及七個 Button ,全都設定好相關的格子,其中

15
self.inputField.grid(row=0, column=1, columnspan=6)


這樣個設定是 self.inputField 在從上數下來第 0 列,從左往右第 1 行,然後水平擴展 6 格,注意,第幾列第幾行都是從 0 開始數。


目前按鈕都沒有動作,因為我們還沒設定相關事件 (event) 處理,這要設定 command 囉!


中英文術語對照
標籤label
按鈕button
選單menu
文字方塊textfield
物件object
參數parameter
類別class
實體屬性instance attribute
繼承inherit
物件導向程式設計object-oriented programming language
子類別subclass
父類別superclass
方法method
格子式幾何版面管理grid geometry manager
事件event

沒有留言:

張貼留言