Tkinter教程之Pack篇

來源:互聯網
上載者:User

標籤:blog   http   使用   ar   for   art   sp   log   on   

本文轉載自:http://blog.csdn.net/jcodeer/article/details/1813077

‘‘‘Tkinter教程之Pack篇‘‘‘
#Pack為一布局管理器,可將它視為一個彈性的容器
‘‘‘1.一個空的widget‘‘‘
#不使用pack
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
# 查看當前root下的子組件,解譯器沒有報異常,說明Pack已建立,並可以使用,此時的輸出為空白,即root沒有任何子組件。
print root.pack_slaves()
# 向root中pack一個Label
Label(root,text = ‘pack‘).pack()
# 再次列印出root的子組件,可以看到已經包含一個組件,即剛才建立的Label,說明Label調用pack()是將自己加入到了root中。
print root.pack_slaves()
root.mainloop()
# pack_salves列印當前組件包擁有的子組件,通過這個函數可以查看各個組件是否有內含項目關聯性。
‘‘‘2.root與Pack的關係‘‘‘
# -*- coding: cp936 -*-
# 使用文字create_text
from Tkinter import *
root = Tk()
# 改變root的大小為80x80
root.geometry(‘80x80+0+0‘)
print root.pack_slaves()
Label(root,text = ‘pack‘).pack()
print root.pack_slaves()
root.mainloop()
#可以看出Pack的結果沒有什麼變化,它不對root產生影響,也就是說Pack可以“縮小”至只包含一個Label組件,root可以自己控制項自己的大小。
‘‘‘3.向Pack中添加多個組件‘‘‘
# -*- coding: cp936 -*-
# 向Pack中添加多個Label
from Tkinter import *
root = Tk()
# 改變root的大小為80x80
root.geometry(‘80x80+0+0‘)
print root.pack_slaves()
for i in range(5):
    Label(root,text = ‘pack‘ + str(i)).pack()
print root.pack_slaves()
root.mainloop()
# 使用用預設的設定pack將向下添加組件,第一個在最上方,然後是依次向下排列。注意最後一個Label的顯示不完全,稍後解釋原因
‘‘‘4.固定設定到自由變化‘‘‘
# 上例中看到label4沒有顯示完全
# -*- coding: cp936 -*-
# 不設定root的大小,使用預設
from Tkinter import *
root = Tk()
#去掉下面的這句
#root.geometry(‘80x80+0+0‘)
print root.pack_slaves()
for i in range(5):
    Label(root,text = ‘pack‘ + str(i)).pack()
print root.pack_slaves()
root.mainloop()
#使用用預設的設定pack將向下添加組件,第一個在最上方,然後是依次向下排列。這樣的話最後一個已經顯示出來的,這就是為什麼稱Pack為彈性的容器的原因了,雖然有這個特性,但它並不是總是能夠按照我們的意思進行布局,我們可以強制設定容器的大小,以覆蓋Pack的預設設定。Pack的優先順序低。
‘‘‘5.fill如何控制子組件的布局‘‘‘
# -*- coding: cp936 -*-
# 不設定root的大小,使用預設
from Tkinter import *
root = Tk()
# 改變root的大小為80x80
root.geometry(‘80x80+0+0‘)
print root.pack_slaves()
# 建立三個Label分別使用不同的fill屬性
Label(root,text = ‘pack1‘,bg = ‘red‘).pack(fill = Y)
Label(root,text = ‘pack2‘,bg = ‘blue‘).pack(fill = BOTH)
Label(root,text = ‘pack3‘,bg = ‘green‘).pack(fill = X)
print root.pack_slaves()
root.mainloop()
#第一個只保證在Y方向填充,第二個保證在XY兩個方向上填充,第三個不使用填充屬性,注意Pack只會吝嗇地給出可以容納這三個組件的最小地區,它不允許使用剩餘的空間了,故下方留有“空白”。
‘‘‘6.expand如何控制組件的布局‘‘‘
# -*- coding: cp936 -*-
# 這個屬性指定如何使用額外的空間,即上例中留下來的“空白”
from Tkinter import *
root = Tk()
# 改變root的大小為80x80
root.geometry(‘80x80+0+0‘)
print root.pack_slaves()
# 建立三個Label分別使用不同的fill屬性
Label(root,text = ‘pack1‘,bg = ‘red‘).pack(fill = Y,expand = 1)
Label(root,text = ‘pack2‘,bg = ‘blue‘).pack(fill = BOTH,expand = 1)
Label(root,text = ‘pack3‘,bg = ‘green‘).pack(fill = X,expand = 0)
print root.pack_slaves()
root.mainloop()
# 第一個只保證在Y方向填充,第二個保證在XY兩個方向上填充,第三個不使用填充屬性,這個例子中第一個Label和第二個Label使用了expand = 1屬性,而第三個使用expand = 0屬性,改變root的大小,可以看到Label1和Label2是隨著root的大小變化而變化(嚴格地它的可用空間在變化),第三個只中使用fill進行X方向上的填充,不使用額外的空間。
‘‘‘7.改變組件的排放位置‘‘‘
# 使用side屬性改變置放位置
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
# 改變root的大小為80x80
root.geometry(‘80x80+0+0‘)
print root.pack_slaves()
# 建立三個Label分別使用不同的fill屬性,改為水平放置
# 將第一個Label居左放置
Label(root,text = ‘pack1‘,bg = ‘red‘).pack(fill = Y,expand = 1,side = LEFT)
# 將第二個Label居右放置
Label(root,text = ‘pack2‘,bg = ‘blue‘).pack(fill = BOTH,expand = 1,side = RIGHT)
# 將第三個Label居左放置,靠Label放置,注意它不會放到Label1的左邊
Label(root,text = ‘pack3‘,bg = ‘green‘).pack(fill = X,expand = 0,side = LEFT)
print root.pack_slaves()
root.mainloop()
# 第一個只保證在Y方向填充,第二個保證在XY兩個方向上填充,第三個不使用填充屬性,這個例子中第一個Label和第二個Label使用了expand = 1屬性,而第三個使用expand = 0屬性,改變root的大小,可以看到Label1和Label2是隨著root的大小變化而變化(嚴格地它的可用空間在變化),第三個只中使用fill進行X方向上的填充,不使用額外的空間。
‘‘‘8.設定組件之間的間隙大小‘‘‘
# ipadx設定內部間隙
# padx設定外部間隙
# -*- coding: cp936 -*-
# 不設定root的大小,使用預設
from Tkinter import *
root = Tk()
# 改變root的大小為80x80
# root.geometry(‘80x80+0+0‘)
print root.pack_slaves()
# 建立三個Label分別使用不同的fill屬性,改為水平放置
# 將第一個LabelFrame居左放置
L1 = LabelFrame(root,text = ‘pack1‘,bg = ‘red‘)
# 設定ipadx屬性為20
L1.pack(side = LEFT,ipadx = 20)
Label(L1,
      text = ‘inside‘,
      bg = ‘blue‘
      ).pack(expand = 1,side = LEFT)
L2 = Label(root,
           text = ‘pack2‘,
           bg = ‘blue‘
           ).pack(fill = BOTH,expand = 1,side = LEFT,padx = 10)
L3 = Label(root,
           text = ‘pack3‘,
           bg = ‘green‘
           ).pack(fill = X,expand = 0,side = LEFT,pady = 10)
print root.pack_slaves()
root.mainloop()
#為了示範ipadx/padx,建立了一個LabelFrame設定它的ipadx為20,即內部間隔值為20,它的子組件若使用則會留出20個單位;Label2和Label3分別設定x和y方向上的外部間隔值,所有與之排列的組件會與之保留10個單位值的距離

Tkinter教程之Pack篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.