欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python中GUI设计之tkinter控件的使用(容器控件之Frame框架和LabelFrame标签框架以及TopLevel顶层窗口)

程序员文章站 2022-03-02 13:33:06
...

1. 框架的基本概念:

这是一个容器控件,当我们设计GUI和复杂的时候,可以用考虑将一系列的Weight组织在一个框架内,这样会方便管理。

2. 框架:Frame ,与C#中的Panel类似

格式:Frame(父对象,options…)
options:下面总结一部分常用的。

  1. borderwidth或者bd:标签边界宽度,默认2。
  2. height:框架的高度,单位是像素。
  3. relief:默认是relief=FLAT,可以控制框架外框。
  4. width:框架的宽度,单位是像素。
  5. cursor:设置当鼠标移动到控件上时鼠标的样式。

示例1:

from tkinter import *

root = Tk()
root.title("Frame")

# 遍历RGB三种颜色,并创建Frame控件,赋值背景色
fms = {'red':'cross','green':'boat','blue':'clock'}
for fmColor in fms:
    Frame(root,bg = fmColor,cursor = fms[fmColor],height = 50,width = 200).pack(side = LEFT)
     
root.mainloop()

运行:
Python中GUI设计之tkinter控件的使用(容器控件之Frame框架和LabelFrame标签框架以及TopLevel顶层窗口)

示例2:在框架上添加Widget控件

A = Frame(root, options…) # 传回框架对象A
btn = Button(A, …) # 框架对象A是btn功能按钮上的父容器

from tkinter import*
 
root=Tk()
root.title("Add widget control in frame")

# 创建上Frame
frameUpper=Frame(root,bg="lightyellow")
frameUpper.pack()

# 将三个按钮分别添加到上面的Frame上
btnRed=Button(frameUpper,text="Red",fg="red")
btnRed.pack(side=LEFT,padx=5,pady=5)

btnGreen=Button(frameUpper,text="Green",fg="green")
btnGreen.pack(side=LEFT,padx=5,pady=5)

btnBlue=Button(frameUpper,text="Blue",fg="blue")
btnBlue.pack(side=LEFT,padx=5,pady=5)


# 创建下Frame
frameLower=Frame(root,bg="lightblue")
frameLower.pack()

# 将按钮添加到下Frame
btnPurple=Button(frameLower,text="Purple",fg="purple")
btnPurple.pack(side=LEFT,padx=5,pady=5)

root.mainloop()

运行:
Python中GUI设计之tkinter控件的使用(容器控件之Frame框架和LabelFrame标签框架以及TopLevel顶层窗口)

3. 标签框架:LabelFrame, 与C#中的GroupBox控件相同

LabelFrame(父容器,options…)
其中options的包含主要的:

  1. font:标签框架的字形。
  2. labelAnchor:设置放置标签的位置。
  3. text:标签内容。

示例1:将标签框架应用与复选框

from tkinter import*

# 遍历checkboxes数组,并打印所有状态为true的元组
def printInfo():
    selection=''
    for i in checkboxes:
        if checkboxes[i].get()==True:
            selection=selection+sports[i]+"\t"
    print(selection)
            
root=Tk()
root.title("LabelFrame add checkboxs")
root.geometry("400x220")

labFrame=LabelFrame(root,text="选择你最喜欢的运动项目")
sports={0:"足球",1:"棒球",2:"篮球",3:"网球"}
checkboxes={}
for i in range(len(sports)):
    checkboxes[i]=BooleanVar()
    # 创建CheckBox复选框,父容器为 LabelFrame 
    Checkbutton(labFrame,text=sports[i],variable=checkboxes[i]).grid(row=i+1,sticky=W)
    
labFrame.pack(ipadx=5,ipady=5,pady=10)

# 创建一个button,绑定事件为 printInfo
btn=Button(root,text="确定",width=10,command=printInfo)
btn.pack()

root.mainloop()

运行:
Python中GUI设计之tkinter控件的使用(容器控件之Frame框架和LabelFrame标签框架以及TopLevel顶层窗口)

4. 顶层窗口 : TopLevel

与Frame类似,但是TopLevel产生的是一个独立的窗体。关闭TopLevel窗口,原窗口可以继续使用,但是如果关闭了原窗口,TopLevel窗口则会自动关闭。

from tkinter import *
import random

root=Tk()
root.title("TopLevel")

msgYes,msgNo,msgExit=1,2,3
def MessageBox():
    msgType=random.randint(1,3)
    if msgType==msgYes:
        labTxt='YES'
    elif msgType==msgNo:
        labTxt='NO'
    elif msgType==msgExit:
        labTxt='Exit'
        
    # 创建Toplevel窗体
    tl=Toplevel()
    tl.geometry("300x180")
    tl.title("MessageBox")
    # 打印Label标签到MessageBox上
    Label(tl,text=labTxt).pack(fill=BOTH,expand=True)
    
btn=Button(root,text='Click me',command=MessageBox)
btn.pack()

root.mainloop()

运行:
Python中GUI设计之tkinter控件的使用(容器控件之Frame框架和LabelFrame标签框架以及TopLevel顶层窗口)
先更新到这里,后面有时间再补,拜了个拜。。。

相关标签: Python