目錄頁請(qǐng)猛擊我
在容器中嵌入一個(gè)容器
代碼在最下面
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext # 導(dǎo)入滾動(dòng)文本框的模塊
win = tk.Tk()
win.title("Python GUI") # 添加標(biāo)題
# 創(chuàng)建一個(gè)容器,
monty = ttk.LabelFrame(win, text=" Monty Python ") # 創(chuàng)建一個(gè)容器偏瓤,其父容器為win
monty.grid(column=0, row=0, padx=10, pady=10) # padx pady 該容器外圍需要留出的空余空間
aLabel = ttk.Label(monty, text="A Label")
ttk.Label(monty, text="Chooes a number").grid(column=1, row=0) # 添加一個(gè)標(biāo)簽流酬,并將其列設(shè)置為1,行設(shè)置為0
ttk.Label(monty, text="Enter a name:").grid(column=0, row=0, sticky='W') # 設(shè)置其在界面中出現(xiàn)的位置 column代表列 row 代表行
# button被點(diǎn)擊之后會(huì)被執(zhí)行
def clickMe(): # 當(dāng)acction被點(diǎn)擊時(shí),該函數(shù)則生效
action.configure(text='Hello ' + name.get() + ' ' + numberChosen.get()) # 設(shè)置button顯示的內(nèi)容
print('check3 is %s %s' % (type(chvarEn.get()), chvarEn.get()))
# 按鈕
action = ttk.Button(monty, text="Click Me!", command=clickMe) # 創(chuàng)建一個(gè)按鈕, text:顯示按鈕上面顯示的文字, command:當(dāng)這個(gè)按鈕被點(diǎn)擊之后會(huì)調(diào)用command函數(shù)
action.grid(column=2, row=1) # 設(shè)置其在界面中出現(xiàn)的位置 column代表列 row 代表行
# 文本框
name = tk.StringVar() # StringVar是Tk庫內(nèi)部定義的字符串變量類型,在這里用于管理部件上面的字符;不過一般用在按鈕button上晋辆。改變StringVar,按鈕上的文字也隨之改變。
nameEntered = ttk.Entry(monty, width=12, textvariable=name) # 創(chuàng)建一個(gè)文本框珊膜,定義長度為12個(gè)字符長度,并且將文本框中的內(nèi)容綁定到上一句定義的name變量上宣脉,方便clickMe調(diào)用
nameEntered.grid(column=0, row=1, sticky=tk.W) # 設(shè)置其在界面中出現(xiàn)的位置 column代表列 row 代表行
nameEntered.focus() # 當(dāng)程序運(yùn)行時(shí),光標(biāo)默認(rèn)會(huì)出現(xiàn)在該文本框中
# 創(chuàng)建一個(gè)下拉列表
number = tk.StringVar()
numberChosen = ttk.Combobox(monty, width=12, textvariable=number, state='readonly')
numberChosen['values'] = (1, 2, 4, 42, 100) # 設(shè)置下拉列表的值
numberChosen.grid(column=1, row=1) # 設(shè)置其在界面中出現(xiàn)的位置 column代表列 row 代表行
numberChosen.current(0) # 設(shè)置下拉列表默認(rèn)顯示的值车柠,0為 numberChosen['values'] 的下標(biāo)值
# 復(fù)選框
chVarDis = tk.IntVar() # 用來獲取復(fù)選框是否被勾選,通過chVarDis.get()來獲取其的狀態(tài),其狀態(tài)值為int類型 勾選為1 未勾選為0
check1 = tk.Checkbutton(monty, text="Disabled", variable=chVarDis, state='disabled') # text為該復(fù)選框后面顯示的名稱, variable將該復(fù)選框的狀態(tài)賦值給一個(gè)變量塑猖,當(dāng)state='disabled'時(shí)竹祷,該復(fù)選框?yàn)榛疑荒茳c(diǎn)的狀態(tài)
check1.select() # 該復(fù)選框是否勾選,select為勾選, deselect為不勾選
check1.grid(column=0, row=4, sticky=tk.W) # sticky=tk.W 當(dāng)該列中其他行或該行中的其他列的某一個(gè)功能拉長這列的寬度或高度時(shí)羊苟,設(shè)定該值可以保證本行保持左對(duì)齊塑陵,N:北/上對(duì)齊 S:南/下對(duì)齊 W:西/左對(duì)齊 E:東/右對(duì)齊
chvarUn = tk.IntVar()
check2 = tk.Checkbutton(monty, text="UnChecked", variable=chvarUn)
check2.deselect()
check2.grid(column=1, row=4, sticky=tk.W)
chvarEn = tk.IntVar()
check3 = tk.Checkbutton(monty, text="Enabled", variable=chvarEn)
check3.select()
check3.grid(column=2, row=4, sticky=tk.W)
# 單選按鈕
# 定義幾個(gè)顏色的全局變量
colors = ["Blue", "Gold", "Red"]
# 單選按鈕回調(diào)函數(shù),就是當(dāng)單選按鈕被點(diǎn)擊會(huì)執(zhí)行該函數(shù)
def radCall():
radSel = radVar.get()
if radSel == 0:
win.configure(background=colors[0]) # 設(shè)置整個(gè)界面的背景顏色
print(radVar.get())
elif radSel == 1:
win.configure(background=colors[1])
elif radSel == 2:
win.configure(background=colors[2])
radVar = tk.IntVar() # 通過tk.IntVar() 獲取單選按鈕value參數(shù)對(duì)應(yīng)的值
radVar.set(99)
for col in range(3):
# curRad = 'rad' + str(col)
curRad = tk.Radiobutton(monty, text=colors[col], variable=radVar, value=col, command=radCall) # 當(dāng)該單選按鈕被點(diǎn)擊時(shí),會(huì)觸發(fā)參數(shù)command對(duì)應(yīng)的函數(shù)
curRad.grid(column=col, row=5, sticky=tk.W) # 參數(shù)sticky對(duì)應(yīng)的值參考復(fù)選框的解釋
# 滾動(dòng)文本框
scrolW = 30 # 設(shè)置文本框的長度
scrolH = 3 # 設(shè)置文本框的高度
scr = scrolledtext.ScrolledText(monty, width=scrolW, height=scrolH, wrap=tk.WORD) # wrap=tk.WORD 這個(gè)值表示在行的末尾如果有一個(gè)單詞跨行蜡励,會(huì)將該單詞放到下一行顯示,比如輸入hello令花,he在第一行的行尾,llo在第二行的行首, 這時(shí)如果wrap=tk.WORD,則表示會(huì)將 hello 這個(gè)單詞挪到下一行行首顯示, wrap默認(rèn)的值為tk.CHAR
scr.grid(column=0, columnspan=3) # columnspan 個(gè)人理解是將3列合并成一列 也可以通過 sticky=tk.W 來控制該文本框的對(duì)齊方式
# 標(biāo)簽容器
# 創(chuàng)建一個(gè)容器,其父容器為monty
labelsFrame = ttk.LabelFrame(monty, text='Labels in a Frame')
labelsFrame.grid(column=1, row=7)
# 將標(biāo)簽放入到容器中
ttk.Label(labelsFrame, text='Label1').grid(column=0, row=0)
ttk.Label(labelsFrame, text='Label2').grid(column=1, row=0)
ttk.Label(labelsFrame, text='Label3').grid(column=2, row=0)
for child in labelsFrame.winfo_children(): # labelsFrame.winfo_children 可以獲取labelsFrame容器的所有子部件的對(duì)象
child.grid_configure(padx=8, pady=4) # 通過子部件對(duì)象的grid_configure()方法可以修改部件的屬性
win.mainloop() # 當(dāng)調(diào)用mainloop()時(shí),窗口才會(huì)顯示出來
代碼執(zhí)行結(jié)果如圖
fabca80c-8ee8-47c9-84d9-2d7c81e732a2.jpg