tkinter GUI编程(学习笔记-1 窗口组件与布局)

简介: tkinter GUI编程(学习笔记-1 窗口组件与布局)

开发图形用户界面(GUI)应用程序是Python的重要应用之一,标准库tkinter用来实现图形用户界面。

tkinter模块是Python事实上的GUI库,包含在Python的基本安装包中。

使用tkinter模块编写的GUI程序是跨平台的,可在多种操作系统中运行。

第一个tkinter GUI程序

组件和容器是GUI编程的两个基本概念。

● 组件是指标签、按钮、列表框等对象,需将其放在容器中显示。

● 容器是指可放置其他组件或容器的对象。

1. #带有标签和按钮的tkinter GUI程序
2. import tkinter      #导入tkinter模块
3. win=tkinter.Tk()    #创建主窗口对象
4. label1=tkinter.Label(win,text="Hello,Python")  #创建标签对象
5. btn1=tkinter.Button(win,text='click')                 #创建按钮对象
6. label1.pack()   #打包对象 使其显示在其父容器中
7. btn1.pack()
8. win.mainloop()   #启动事件循环

tkinter GUI编程步骤

(1)导入tkinter模块。import tkinter 或  from tkinter import *

(2)创建主窗口对象,如果未创建主窗口对象,tkinter将以默认的顶层窗口作为主窗口。

(3)创建标签、按钮、输入文本框等组件对象。

(4)打包组件,将组件显示在其父容器中。

(5)启动事件循环,GUI窗口启动,等待响应用户操作。

1. import tkinter 
2. from tkinter import*

设置窗口和组件的属性
设置窗口属性常用的方法有title()、geometry()和config()方法。

1. title()方法和geometry()方法

title()方法用于设置窗口的标题,geometry()用于方法设置窗口的大小。

geometry()方法中的参数格式为“宽度x高度” 。

1. #设置窗口标题和大小
2. from tkinter import *     #导入tkinter模块
3. win=Tk()    #创建主窗口对象
4. label1=Label(win,text="Hello,Python")  #创建标签对象
5. btn1=Button(win,text='click')                 #创建按钮对象
6. label1.pack()   #打包对象 使其显示在其父容器中
7. btn1.pack()
8. win.title("设置窗口标题和大小")      # title()方法设置窗口标题
9. win.geometry("300x200")             # geometry()方法设置窗口大小
10. win.mainloop()   #启动事件循环

2. config()方法

config()方法用于设置组件文本、对齐方式、前景色、背景色、字体等属性。

1. #使用config()方法设置组件属性
2. from tkinter import *     #导入tkinter模块
3. win=Tk()           #创建主窗口对象
4. 
5. label=Label()    #创建标签对象
6. label.config(text="Hello Python")    #设置文本属性
7. label.config(fg="white",bg="blue")  #设置前景和背景属性
8. label.pack()      #打包对象 使其显示在其父容器中
9. 
10. btn1=Button()                 #创建按钮对象
11. btn1["text"]="click"
12. btn1.pack()
13. 
14. win.title("设置组件属性")      # title()方法设置窗口标题
15. win.geometry("300x200")        # geometry()方法设置窗口大小
16. win.mainloop()   #启动事件循环

tkinter GUI的布局管理

● 容器中组件的布局是很繁琐的,需要调整组件自身的大小,还要设计和其他组件的相对位置。

● 实现组件布局的方法被称为布局管理器或几何管理器。

● tkinter使用三种方法来实现布局:pack()、grid()、place(),。

● Frame作为中间层的容器组件,可以分组管理组件,实现复杂的布局。

使用pack()方法的布局

pack()方法以块的方式布局组件。

pack()方法将组件显示在默认位置,是最简单、直接的用法。

pack()方法的参数:

side表示组件在容器中的位置;

    · expand表示组件可拉伸;

    · fill取值为X、Y或BOTH,填充X或Y方向上的空间;

    · anchor表示组件在窗口中位置。

1. #使用pack()方法的side参数设置组件的布局
2. from tkinter import *     #导入tkinter模块
3. win=Tk()           #创建主窗口对象
4. 
5. label1=Label(win,text="Top标签",fg="white",bg="blue")    #创建标签对象
6. label2=Label(win,text="Left标签",fg="white",bg="blue")    
7. label3=Label(win,text="Bottom标签",fg="white",bg="blue")   
8. label4=Label(win,text="Right标签",fg="white",bg="blue")  
9. 
10. label1.pack(side=TOP)      #打包对象 使其显示在其父容器中
11. label2.pack(side=LEFT) 
12. label3.pack(side=BOTTOM) 
13. label4.pack(side=RIGHT) 
14. 
15. win.title("pack()方法")             # title()方法设置窗口标题
16. win.geometry("200x150")             # geometry()方法设置窗口大小
17. win.mainloop()   #启动事件循环

1. #使用pack()方法的anchor参数设置组件的布局
2. from tkinter import *     #导入tkinter模块
3. win=Tk()           #创建主窗口对象
4. 
5. label1=Label(win,text="标签标题",fg="white",bg="blue")    #创建标签对象
6. label1.pack(anchor=NW,padx=5)   
7. 
8. label2=Label(win)    
9. label2.config(text="标签内容",fg="white",bg="grey")   
10. label2.pack(expand=YES,fill=BOTH,padx=5)
11. 
12. btn=Button()
13. btn["text"]="click"
14. btn.pack()              #打包对象
15. 
16. win.title("anchor参数设置")         # title()方法设置窗口标题
17. win.geometry("300x200")             # geometry()方法设置窗口大小
18. win.mainloop()   #启动事件循环

使用grid()方法的布局

使用grid()方法的布局被称为网格布局,它按照二维表格的形式,将容器划分为若干行和列,组件的位置由行列所在位置确定。

在同一容器中,只能使用pack()方法或grid()方法中的一种布局方式。

grid()方法的参数:

  · row和column,组件所在的行和列的位置

  · rowspan和columnspan,组件从所在位置起跨的行数和跨的列数

  · sticky,组件所在位置的对齐方式

1. #使用grid()方法设置组件的布局
2. from tkinter import *     #导入tkinter模块
3. win=Tk()           #创建主窗口对象
4. 
5. label1=Label(win,text="请选择下列操作",fg="green")    #创建标签对象
6. label1.grid(row=0,column=0,columnspan=4)   
7. 
8. btn1=Button(text="copy")
9. btn2=Button(text="cut")
10. btn3=Button(text="paste")
11. btn4=Button(text="delete")
12. btn1.grid(row=2,column=0,padx=2)   
13. btn2.grid(row=2,column=1,padx=2)  
14. btn3.grid(row=2,column=2,padx=2)  
15. btn4.grid(row=2,column=3,padx=2)  
16. 
17. win.title("grid()方法设置")           # title()方法设置窗口标题
18. win.geometry("200x150")             # geometry()方法设置窗口大小
19. win.mainloop()   #启动事件循环

使用place()方法的布局

比grid()和pack()布局更精确地控制组件在容器中的位置。

如果容器大小调整,可能会出现布局不适应的情况。

place()方法的参数

  · x和y,用绝对坐标指定组件的位置

  · height和width,指定组件的高度和宽度

  · relx和rely,按容器高度和宽度的比例来指定组件的位置

  · relheight和relwidth,按容器高度和宽度的比例来指定组件的高度和宽度

1. #使用place()方法设置组件的布局
2. from tkinter import *     #导入tkinter模块
3. win=Tk()           #创建主窗口对象
4. 
5. label1=Label(win,text="place()方法测试",fg="green")    #创建标签对象
6. label1.place(x=140,y=50,anchor=N)
7. 
8. btn1=Button(text="place()按钮")
9. btn1.place(x=140,y=80,anchor=N)
10. btn2=Button(text="grid()按钮")
11. btn2.grid(row=2,column=1)  
12. 
13. win.title("place()方法设置")           # title()方法设置窗口标题
14. win.geometry("200x150")             # geometry()方法设置窗口大小
15. win.mainloop()   #启动事件循环

使用框架的复杂布局

框架( Frame)是一个容器组件,通常用于对组件进行分组

可以从而实现复杂的布局。

· bd                      指定边框宽度

· relief                  指定边框样式,取值为FLAT(扁平,默认值) 、RAISED(凸起)、 SUNKEN(凹                                    陷)、RIDGE(脊状)、GROOVE(凹槽)和 SOLID(实线)

· width和height    设置宽度或高度,如果忽略,容器通常根据内容组件的大小调整Frame大小

1. #使用Frame实现复杂布局
2. from tkinter import *     #导入tkinter模块
3. win=Tk()           #创建主窗口对象
4. frma=Frame()   #框架frma
5. frmb=Frame()   #框架frmb
6. frma.pack()   
7. frmb.pack()
8. 
9. #添加两个标签和两个输入框
10. lblUname=Label(frma,text="UserName",width=10,fg="black")
11. etyUname=Entry(frma,width=20)
12. lblUname.grid(row=1,column=1)
13. etyUname.grid(row=1,column=2)
14. lblPwd=Label(frma,text="PassWord",width=10,fg="black")
15. etyPwd=Entry(frma,width=20)
16. lblPwd.grid(row=2,column=1)
17. etyPwd.grid(row=2,column=2)
18. #向容器中添加两个按钮
19. btnRest=Button(frmb,text="ReSet",width=10)
20. btnSubmit=Button(frmb,text="Submit",width=10)
21. btnRest.grid(row=1,column=1)
22. btnSubmit.grid(row=1,column=2)
23. 
24. win.title("Frame实现复杂布局")           # title()方法设置窗口标题
25. win.geometry("300x150")             # geometry()方法设置窗口大小
26. win.mainloop()   #启动事件循环

相关文章
|
8月前
|
8月前
|
容器
|
8月前
|
数据安全/隐私保护
|
8天前
|
开发框架 程序员 开发者
Python GUI编程:从入门到精通3.2 GUI编程:学习使用Tkinter、PyQt或wxPython等库创建图形用户界面。
Python GUI编程:从入门到精通3.2 GUI编程:学习使用Tkinter、PyQt或wxPython等库创建图形用户界面。
|
8月前
|
8月前
|
10月前
|
Python
tkinter GUI编程(学习笔记-2 tkinter的常用组件)
tkinter GUI编程(学习笔记-2 tkinter的常用组件)
|
11月前
|
自然语言处理 Python 容器
Python|GUI编程中组件的布局
Python|GUI编程中组件的布局
275 0
|
Python
Python高级进阶#009 pyqt5中窗体的绝对布局和相对布局
Python高级进阶#009 pyqt5中窗体的绝对布局和相对布局
10059 2
|
编解码 Python
Python高级进阶#008 pyqt5窗体居中和布局
Python高级进阶#008 pyqt5窗体居中和布局
245 0

热门文章

最新文章