tkinter簡介
tkinter是Python自帶的一個GUI包。優缺點非常明顯:
優點:簡單、快速、無需安裝
缺點:界面複古,缺少對一些複雜功能的支援
(注意,Python2的tkinter名稱為Tkinter,我們不讨論它)
啟動tkinter
在指令行輸入
python -m tkinter
就會彈出一個tkinter視窗:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iN0UDMzIWZkJmNlVmZ4YzYyYzXyATO0UTM3AzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
最上面首先是版本是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()
- 導入:tkinter
- 建立主視窗: root_window =tk.Tk()
- 設定視窗屬性(标題、大小):
root_window.title(‘Hello,world’)
root_window.geometry(‘450x300’)
- 開啟主循環
root_window.mainloop()
tkiner 身高電腦
現在我們來做一個有功能的tkinter程式。
最終效果如下:我們輸入身高,點選計算。然後程式通過計算,得到我們的身高并顯示出來。
那麼我們在上面Helloworld程式的基礎上開始制作。首先,我們把視窗名改成“身高電腦”。
root_window.title('身高電腦')
然後我們要把按鈕,提示資訊放上去。
# 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()
但是點選計算後,并不會有動作,我們還需要将點選按鈕和功能綁定。
我們定義函數
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)
當然,如果你覺得字型太小,也可以在font參數設定,font是一個三元組( family, size, style),分别是(字型,大小,格式)。
tk.Label(root_window, text="請輸入身高",font=("Courier", 24, "italic"),height=3).grid(row=0,column=0)
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()