tkinter布局管理控件Frame

布局管理控件

tkinter提供三个常用方法,在tkinter控件布局grid中使用grid()排布了几个简单的控件。除此之外,tkinter 还提供了几个布局管理控件,比如 Frame 、LabelFrame 等,这些控件的主要作用是为其他控件提供载体,并将主窗口界面划分成多个区域,从而方便开发者对不同区域进行设计与管理。

Frame控件

Frame 本质上也是一个矩形窗体,同其他控件一样也需要位于主窗口内。我们可以在主窗口内放置多个 Frame 控件,并且每个 Frame 中还可以嵌套一个或者多个Frame,从而将主窗口界面划分成多个区域。
Frame 控件的常用属性如下表所示:

属性说明
bg设置 Frame 的背景颜色
bd指定 Frame 的边框宽度
colormap指定 Frame 组件及其子组件的颜色映射
container布尔值参数,若参数值为 True,则窗体将被用作容器使用,一些其他程序也可以被嵌入
cursor指定鼠标在 Frame 上飘过的鼠标样式,默认由系统指定
height/width设置 Frame 的高度和宽度
highlightbackground指定当 Frame 没有获得焦点的时候高亮边框的颜色,通常由系统指定为标准颜色
highlightcolor指定当 Frame 获得焦点的时候高亮边框的颜色
highlightthickness指定高亮边框的宽度,默认值是 0
padx/pady距离主窗口在水平/垂直方向上的外边距
relief指定边框的样式,参数值 “sunken”,“raised”,“groove” 或 “ridge”,“flat”,默认为 "falt’
takefocus布尔值参数,默认为 False,指定该组件是否接受输入焦点(即用户通过 Tab 键将焦点转移上来)

示例

import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox as mb

m = tk.Tk()
m.title("tkinter Listbox")
m.geometry('500x300')
m.resizable(0, 0)

lb = tk.Label(text='Programming Languages', font=('times', 12, 'bold'), fg='#CD7054')
lb.pack()

frame1 = tk.Frame(m)
frame1.pack()

varLb = tk.Label(frame1, text='Popular Languages', font=('times', 10, 'bold'), fg='orange')
plotLb = tk.Label(frame1, text='Your Languages', font=('times', 10, 'bold'), fg='orange')
varLb.grid(row=0, column=0, columnspan=3, padx=5)
plotLb.grid(row=0, column=6, columnspan=3, padx=5)

lbox = tk.Listbox(frame1, selectmode=tk.EXTENDED, height=8)
lbox.grid(row=1, column=0, columnspan=3, rowspan=5, sticky=tk.E, padx=10)
items = ["c", "c++", "c#", "go", "java", "javascript", "php", "python", "r", "swift"]
for i in items:
    lbox.insert('end', i)  #
list = []
langCnt = 0


def Add():
    cursel = lbox.curselection()
    curvar = lkLbox.get(0, tk.END)
    isexist = False
    if len(cursel) > 0:
        for i in cursel:
            lkLbox.insert('end', lbox.get(i))
            if lbox.get(i) in curvar:
                isexist = True
    if isexist:
        mb.showinfo('info', 'Add existing language(s)!')


def Del():
    cursel = lkLbox.curselection()
    if len(cursel) > 0:
        for i in range(len(cursel) - 1, -1, -1):
            lkLbox.delete(cursel[i])


def Clr():
    lkLbox.delete(0, tk.END)


def Set():
    global list
    global curCnt
    list.clear()
    varturp = lkLbox.get(0, tk.END)
    if len(varturp) > 0:
        for var in varturp:
            list.append(var)
    else:
        mb.showwarning('Warning', 'No language is Selected!')
    langCnt = cntCbox.current()
    print(list)
    print(langCnt)


btnAdd = tk.Button(frame1, width=6, text='>>', font=('times', 12, 'bold'), fg='green', command=Add)
btnAdd.grid(row=2, column=4, padx=10)

btnDel = tk.Button(frame1, width=6, text='Del', font=('times', 12, 'bold'), fg='red', command=Del)
btnDel.grid(row=3, column=4, padx=10)

btnClr = tk.Button(frame1, width=6, text='Clr', font=('times', 12, 'bold'), fg='red', command=Clr)
btnClr.grid(row=4, column=4, padx=10)

lkLbox = tk.Listbox(frame1, selectmode=tk.EXTENDED, height=8)
lkLbox.grid(row=1, column=6, columnspan=3, rowspan=5, sticky=tk.W, padx=10)

frame2 = tk.Frame(m)
frame2.pack(pady='10px')

curCntLb = tk.Label(frame2, text='Languages number you master:', font=('times', 10, 'bold'), fg='purple')
curCntLb.grid(row=0, column=0, columnspan=3, padx=5)

cntCbox = ttk.Combobox(frame2)
cntCbox['value'] = ('0', '1', '2', '3', '4', '5', '5+')
cntCbox.current(1)
cntCbox.grid(row=0, column=5, columnspan=3, padx=5)

btnSet = tk.Button(m, text='Apply', font=('times', 12, 'bold'), fg='blue', command=Set)

btnSet.pack(side=tk.BOTTOM, pady=5)
m.mainloop()

每个子区域可独立使用pack(),grid(), place()等,互不影响。
运行结果:
在这里插入图片描述

引用

参考网站包含其他布局管理控件的详细使用说明。
Tkinter布局管理控件

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值