天天看點

用tkinter做一個簡單圖形界面

tkinter簡介

tkinter是Python自帶的一個GUI包。優缺點非常明顯:

優點:簡單、快速、無需安裝

缺點:界面複古,缺少對一些複雜功能的支援

(注意,Python2的tkinter名稱為Tkinter,我們不讨論它)

啟動tkinter

在指令行輸入

​python -m tkinter​

就會彈出一個tkinter視窗:

用tkinter做一個簡單圖形界面

最上面首先是版本是8.6,點選click me!貌似什麼都不會發生,點選QUIT就可以退出。

下面介紹tkinter的簡單用法,更多的可以去​​GUI是什麼 (biancheng.net)​​或

​​Python GUI 程式設計(Tkinter) | 菜鳥教程 (runoob.com)​​​ 或​​Tkinter 8.5 reference: a GUI for Python (tkdocs.com)​​學習。

tkinter HelloWorld

使用tkinter建立一個視窗,标題名稱為Hello,world。

# -*- coding:utf-8 -*-
import tkinter as tk
# 調用Tk()建立主視窗
root_window =tk.Tk()
# 給主視窗起一個名字,也就是視窗的名字
root_window.title('Hello,world')
#設定視窗大小 450x300
root_window.geometry('450x300')
#開啟主循環,讓視窗處于顯示狀态
root_window.mainloop()      
  1. 導入:tkinter
  2. 建立主視窗: root_window =tk.Tk()
  3. 設定視窗屬性(标題、大小):

root_window.title(‘Hello,world’)

root_window.geometry(‘450x300’)

  1. 開啟主循環
root_window.mainloop()      

tkiner 身高電腦

現在我們來做一個有功能的tkinter程式。

最終效果如下:我們輸入身高,點選計算。然後程式通過計算,得到我們的身高并顯示出來。

用tkinter做一個簡單圖形界面

那麼我們在上面Helloworld程式的基礎上開始制作。首先,我們把視窗名改成“身高電腦”。

​root_window.title('身高電腦')​

用tkinter做一個簡單圖形界面

然後我們要把按鈕,提示資訊放上去。

# root_window.geometry('450x300')下面添加...
# 設定完視窗後,添加元件
tk.Label(root_window, text="請輸入身高").pack()

cms= StringVar()
tk.Entry(root_window, width=7, textvariable=cms).pack()

tk.Label(root_window, text="cm").pack()
tk.Label(root_window, text="你的身高是").pack()

result = StringVar()
tk.Label(root_window, textvariable=result).pack()

tk.Label(root_window, text="cm").pack()

B = tk.Button(root_window, text="計算")
B.pack()      

我們主要用到了三種元件,​

​tk.Label​

​​ 、​

​tk.Entry​

​​和​

​tk.Button​

​,分别表示文本标簽、輸入框、按鈕。建立完元件後需要調用.pack()方法放置,否則不會出現在界面上。

說明:以這個tk.Label為例。參數需要傳入它的父容器(這裡是root_window),文字内容(text=“請輸入身高”)。然後調用.pack()方法将它放在視窗上。

​tk.Label(root_window, text="請輸入身高").pack()​

這個我們也可以讓Label的文字是一個變量。下面我們先建立一個變量result = StringVar(),然後将result作為tk.Label的參數。

​result = StringVar() tk.Label(root_window, textvariable=result).pack()​

用tkinter做一個簡單圖形界面

但是點選計算後,并不會有動作,我們還需要将點選按鈕和功能綁定。

我們定義函數​

​calculate​

​來實作功能,先擷取輸入的資料(cmt.get()),再設定輸出文本的資料(result.set())。

def calculate(*args):
    try:
        value = float(cms.get())
        result.set(value)
    except ValueError:
        pass      

并且通過command=calculate 将calculate方法和點選按鈕綁定。

B = tk.Button(root_window, text="計算",command=calculate)      

完整代碼:

# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import *

# 調用Tk()建立主視窗
root_window = tk.Tk()
# 給主視窗起一個名字,也就是視窗的名字
root_window.title('身高電腦')
# 設定視窗大小 450x300
root_window.geometry('450x300')

# root_window.geometry('450x300')下面添加...
# 設定完視窗後,添加元件
tk.Label(root_window, text="請輸入身高").pack()

cms = StringVar()
tk.Entry(root_window, width=7, textvariable=cms).pack()

tk.Label(root_window, text="cm").pack()
tk.Label(root_window, text="你的身高是").pack()

result = StringVar()
tk.Label(root_window, textvariable=result).pack()

tk.Label(root_window, text="cm").pack()


def calculate(*args):
    try:
        value = float(cms.get())
        result.set(value)
    except ValueError:
        pass


B = tk.Button(root_window, text="計算", command=calculate)
B.pack()

# 開啟主循環,讓視窗處于顯示狀态
root_window.mainloop()      

除了通過.pack()放置元件,另一種更靈活的方式是.grid(row=r,column=0)方式。這種方式将界面作為網格,然後在網格上放置元件。

# 設定完視窗後,添加元件
tk.Label(root_window, text="請輸入身高",).grid(row=0,column=0)

cms = StringVar()
tk.Entry(root_window, width=7, textvariable=cms).grid(row=0,column=1)

tk.Label(root_window, text="cm").grid(row=0,column=2)
tk.Label(root_window, text="你的身高是").grid(row=1,column=0)

result = StringVar()
tk.Label(root_window, textvariable=result).grid(row=1,column=1)

tk.Label(root_window, text="cm").grid(row=1,column=2)


def calculate(*args):
    try:
        value = float(cms.get())
        result.set(value)
    except ValueError:
        pass


B = tk.Button(root_window, text="計算", command=calculate)
B.grid(row=3,column=3)      
用tkinter做一個簡單圖形界面

當然,如果你覺得字型太小,也可以在font參數設定,font是一個三元組( family, size, style),分别是(字型,大小,格式)。

tk.Label(root_window, text="請輸入身高",font=("Courier", 24, "italic"),height=3).grid(row=0,column=0)      
用tkinter做一個簡單圖形界面

tkinter BMI電腦

稍作修改,我們就可以做出一個BMI電腦:

# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import *

# 調用Tk()建立主視窗
root_window = tk.Tk()
# 給主視窗起一個名字,也就是視窗的名字
root_window.title('BMI電腦')
# 設定視窗大小 450x300
root_window.geometry('450x300')

# root_window.geometry('450x300')下面添加...
# 設定完視窗後,添加元件
tk.Label(root_window, text="請輸入身高cm",height=3).grid(row=0,column=0)
cms = StringVar()
tk.Entry(root_window, width=7, textvariable=cms).grid(row=0,column=1)
tk.Label(root_window, text="cm").grid(row=0,column=2)

tk.Label(root_window, text="請輸體重kg",height=3).grid(row=1,column=0)
kg = StringVar()
tk.Entry(root_window, width=7, textvariable=kg).grid(row=1,column=1)
tk.Label(root_window, text="kg").grid(row=1,column=2)


tk.Label(root_window, text="你BMI是").grid(row=2,column=0)
result = StringVar()
tk.Label(root_window, textvariable=result).grid(row=2,column=1)



def calculate(*args):
    try:
        cm_ = float(cms.get())
        kg_ = float(kg.get())
        value_ =  kg_ /  ((cm_/100) **2)
        value_ = value_.__round__(3)
        result.set(value_)
    except ValueError:
        pass


B = tk.Button(root_window, text="計算", command=calculate)
B.grid(row=3,column=3)

# 開啟主循環,讓視窗處于顯示狀态
root_window.mainloop()