python圖形界面tk 2.2 在容器中嵌入一個容器

目錄頁請猛擊我

在容器中嵌入一個容器

代碼在最下面
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext        # 導(dǎo)入滾動文本框的模塊

win = tk.Tk()
win.title("Python GUI")    # 添加標(biāo)題

# 創(chuàng)建一個容器,
monty = ttk.LabelFrame(win, text=" Monty Python ")     # 創(chuàng)建一個容器,其父容器為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)    # 添加一個標(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被點擊之后會被執(zhí)行
def clickMe():   # 當(dāng)acction被點擊時,該函數(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)建一個按鈕, text:顯示按鈕上面顯示的文字, command:當(dāng)這個按鈕被點擊之后會調(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)建一個文本框,定義長度為12個字符長度,并且將文本框中的內(nèi)容綁定到上一句定義的name變量上,方便clickMe調(diào)用
nameEntered.grid(column=0, row=1, sticky=tk.W)       # 設(shè)置其在界面中出現(xiàn)的位置  column代表列   row 代表行
nameEntered.focus()     # 當(dāng)程序運行時,光標(biāo)默認(rèn)會出現(xiàn)在該文本框中

# 創(chuàng)建一個下拉列表
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)賦值給一個變量,當(dāng)state='disabled'時,該復(fù)選框為灰色,不能點的狀態(tài)
check1.select()     # 該復(fù)選框是否勾選,select為勾選, deselect為不勾選
check1.grid(column=0, row=4, sticky=tk.W)       # sticky=tk.W  當(dāng)該列中其他行或該行中的其他列的某一個功能拉長這列的寬度或高度時,設(shè)定該值可以保證本行保持左對齊,N:北/上對齊  S:南/下對齊  W:西/左對齊  E:東/右對齊

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)

# 單選按鈕

# 定義幾個顏色的全局變量
colors = ["Blue", "Gold", "Red"]

# 單選按鈕回調(diào)函數(shù),就是當(dāng)單選按鈕被點擊會執(zhí)行該函數(shù)
def radCall():
    radSel = radVar.get()
    if radSel == 0:
        win.configure(background=colors[0])      # 設(shè)置整個界面的背景顏色
  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ù)對應(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)該單選按鈕被點擊時,會觸發(fā)參數(shù)command對應(yīng)的函數(shù)
  curRad.grid(column=col, row=5, sticky=tk.W)     # 參數(shù)sticky對應(yīng)的值參考復(fù)選框的解釋

# 滾動文本框
scrolW = 30 # 設(shè)置文本框的長度
scrolH = 3 # 設(shè)置文本框的高度

scr = scrolledtext.ScrolledText(monty, width=scrolW, height=scrolH, wrap=tk.WORD)     # wrap=tk.WORD   這個值表示在行的末尾如果有一個單詞跨行,會將該單詞放到下一行顯示,比如輸入hello,he在第一行的行尾,llo在第二行的行首, 這時如果wrap=tk.WORD,則表示會將 hello 這個單詞挪到下一行行首顯示, wrap默認(rèn)的值為tk.CHAR
scr.grid(column=0, columnspan=3)        # columnspan 個人理解是將3列合并成一列   也可以通過 sticky=tk.W  來控制該文本框的對齊方式

# 標(biāo)簽容器

# 創(chuàng)建一個容器,其父容器為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容器的所有子部件的對象
  child.grid_configure(padx=8, pady=4)         # 通過子部件對象的grid_configure()方法可以修改部件的屬性

win.mainloop()      # 當(dāng)調(diào)用mainloop()時,窗口才會顯示出來

代碼執(zhí)行結(jié)果如圖
fabca80c-8ee8-47c9-84d9-2d7c81e732a2.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,755評論 11 349
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • v好感動就吃飯回合肥該喝喝好吃不貴
    亮點02閱讀 195評論 0 0
  • ?——Command (?) ? ——Control ?——Option (alt) ?——Shift ?——Ca...
    NapoleonY閱讀 1,067評論 0 0

友情鏈接更多精彩內(nèi)容