Python中GUI设计之tkinter控件的使用(容器控件之Frame框架和LabelFrame标签框架以及TopLevel顶层窗口)
程序员文章站
2022-03-02 13:33:06
...
1. 框架的基本概念:
这是一个容器控件,当我们设计GUI和复杂的时候,可以用考虑将一系列的Weight组织在一个框架内,这样会方便管理。
2. 框架:Frame ,与C#中的Panel类似
格式:Frame(父对象,options…)
options:下面总结一部分常用的。
- borderwidth或者bd:标签边界宽度,默认2。
- height:框架的高度,单位是像素。
- relief:默认是relief=FLAT,可以控制框架外框。
- width:框架的宽度,单位是像素。
- 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()
运行:
示例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()
运行:
3. 标签框架:LabelFrame, 与C#中的GroupBox控件相同
LabelFrame(父容器,options…)
其中options的包含主要的:
- font:标签框架的字形。
- labelAnchor:设置放置标签的位置。
- 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()
运行:
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()
运行:
先更新到这里,后面有时间再补,拜了个拜。。。