cp8_1_1.py
2021/5/24 18:25:32
本文主要是介绍cp8_1_1.py,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#!/usr/bin/env python # -*- coding: utf-8 -*- # @File : cp8_1_1.py # @Author: WRH # @Date : 2021/5/17 # @Edition:Python3.8.6 # 第8章:图形化界面设计 # 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口):是指采用图形方式显示的计算机操作用户界面 # python自带的tkinter模块,是一种流行的面向对象的GUI工具包Tk的Python编程接口,提供了便利地创建GUI程序的方法。 ''' Pyhton使用tkinter图形化编程的基本步骤通常包括: 1.导入tkinter模块; 2.创建GUI主窗体; 3.添加人机交互控件并编写相应的函数; 4.在主事件循环中等待用户触发事件响应。 ''' # 本章主要内容 ''' 1.根窗体 2.常见控件 控件的布局 常见控件的共同属性 常见控件特有的属性(注意是特有,不是独有) 3.事件响应 ''' # 8.1 窗体控件布局 # 8.1.1根窗体 :根窗体是图形化应用程序的根容器,是tkinter模块底层控件的实例 import tkinter # 1.创建根窗体,并设置根窗体的属性 root = tkinter.Tk() # 调用tkinter.Tk()方法初始化一个根窗体实例对象root root.title('按键实验') # 设置窗体标题,可选组件 root.geometry('320x240+10+100') # geometry()方法创建一个320×240像素大小的窗体,注意:乘号用小写英文字母x表示 # +10+100表示窗体的左上角位于桌面向右10像素,向下100像素处,可选组件 # 2.添加常见控件,并设置其布局方式、控件共有属性、控件特有属性,所有属性都可省略,根据需要自行添加 lb = tkinter.Label(root, # 给实例化窗体root添加标签(Label)控件,并实例化对象为lb, text='请按键', # 给标签(Label)控件添加特有属性text bg='#d3fbfb', # 给标签(Label)控件添加共有属性背景色(bg),rgb颜色方式 fg='green', # 给标签(Label)控件添加共有属性前景色(fg),颜色名称方式 font=('黑体', 48), # 给标签(Label)控件添加共有属性字体(font) # 并设定字体的主题、大小,字体的大小也决定了标签的高度 width=20, # 给标签(Label)控件添加共有属性宽度(width) relief=tkinter.SUNKEN # 给标签(Label)控件添加共有属性浮雕样式(relief) ) lb.pack() # 控件的布局方法,默认不加参数 # 3.添加事件响应 def show(event): # 定义show函数,并设置参数event s = event.keysym # 设置event的属性keysym(表示字符或者字符型按键名称), lb.configure(text=s) # 控件实例的方法configure()改变属性text的值,使显示的文本为s,方法configure()可写成config() lb.bind('<Key>', show) # 控件实例的方法bind()绑定键盘事件<key>(表示键盘任意键),并调用自定义函数show,注意函数不加括号 lb.focus_set() # 控件实例的方法focus_set()获得焦点,以保持对事件的持续响应 root.mainloop() # mainloop()用来循环前面的代码,进入消息循环,必须组件, # 我们看到的图形化界面不是一个静态的东西,而是一直在循环运行的 # 8.1.2 tkinter常用控件 # 常用控件 ''' 控件名称 说明 Button 按钮控件,单击触发事件 Canvas 画布控件,绘制图形或特殊控件 Checkbutton 多选框控件,用于提供多项选择框 Entry 输入控件,接收单行文本输入 Frame 框架控件,用于控件分组,定义一个窗体,以作为其他控件的容器 Label 标签控件,定义一个文字或图片标签 Listbox 列表框控件,定义一个下拉方块 Menu 菜单控件,定义一个菜单栏、下拉菜单和弹出菜单 Message 消息控件,定义一个对话框 Radiobutton 单选按钮控件,定义一个单选按钮 Scale 范围控件,定义一个滑动条,以帮助用户设置数值 Scrollbar 滚动条控件,定义-一个滚动条 Text Text 文本控件,定义一个文本框 Topleve 此控件与Frame控件类似,可以作为其他控件的容器。但是此控件有自己的最上层窗口,可以提供窗口管理接口 ''' # 添加控件及其属性的语法格式: ''' 控件实例名=tkinter.控件名称(根窗体实例化对象,控件属性名=值) 控件实例名.布局方法() ''' import tkinter root = tkinter.Tk() # 调用tkinter.Tk()方法初始化一个根窗体实例对象root # 添加常见控件,并设置其布局方式、控件共有属性、控件特有属性,所有属性都可省略,根据需要自行添加 lb1 = tkinter.Button(root, relief=tkinter.SUNKEN) lb1.pack() lb2 = tkinter.Canvas(root, bg='#d3fbfb') lb2.pack() lb3 = tkinter.Checkbutton(root, bitmap='error') lb3.pack() tkinter.Entry(root, cursor='heart').pack() # 不用命名,直接实例化通过布局方法呈现,鼠标悬停在上面会由箭头变成心形 root.mainloop() # mainloop()用来循环前面的代码,进入消息循环,必须组件 # 常见控件的共同属性 ''' 属性 说明 取值 anchor 文本起始位置 CENTER(默认),N,NE,E,SE,S,SW,W,NW bg 背景色 fg 前景色 bitmap 黑白二值图标 见表8-3 cursor 鼠标悬停光标 见表8-4 font 指定控件内部文本的字体 font bd 加粗(默认2像素) height 高(以行为单位) image 显示图像 justify 多行文本的对齐方式 CENTER(默认),LEFT,RIGHT,TOP,BOTTOM padx 水平扩展像素 pady 垂直扩展像素 relief 浮雕样式 FLAT,RAISED,SUNKEN,GROOVE,RIDGE state 控件实例状态是否可用 NORMAL(默认),DISABLED width 宽(以行为单位) ''' # 8.1.3 控件布局 # 控件的布局通常有pack()、grid()和place()三种方法。 # 1.pack()方法 ''' 方法pack()是一种简单的布局方法,如果用不加参数的默认方式,将按布局语句的先后, 以最小占用空间的方式自上而下地排列控件实例,并且保持控件本身的最小尺寸。 ''' # 例8-3 用pack()方法不加参数排列标签。为看清楚各控件实例所占用的空间大小,文本使用了不同长度的中英文, # 并设置relief=tkinter.GROOVE的凹陷边缘属性 import tkinter root = tkinter.Tk() # 调用tkinter.Tk()方法初始化一个根窗体实例对象root lbred = tkinter.Label(root, text="Red", fg="red", relief=tkinter.GROOVE) # 添加Label控件,设置其属性 lbred.pack() # 设置控件的布局方式(不加参数) lbgreen = tkinter.Label(root, text="绿色", fg="green", relief=tkinter.GROOVE) lbgreen.pack() lbblue = tkinter.Label(root, text="蓝", fg="blue", relief=tkinter.GROOVE) lbblue.pack() root.mainloop() # mainloop()用来循环前面的代码,进入消息循环,必须组件 ''' pack()方法可设置fill、side等属性参数 fill参数值可以是tkinter.X,tkinter.Y,tkinter.BOTH, 分别表示允许控件实例向水平方向、垂直方向或二维方向伸展填充父容器未被占用的空间 side参数值可以是tkinter.TOP,tkinter.BOTTOM,tkinter.LEFT,tkinter.RIGHT, 分别表示本控件实例的布局相对于下一个控件实例的方位 ''' # 例8-4 用pack()方法加参数排列标签 import tkinter root = tkinter.Tk() lbred = tkinter.Label(root, text="Red", fg="red", relief=tkinter.GROOVE) lbred.pack() lbgreen = tkinter.Label(root, text="绿色", fg="green", relief=tkinter.GROOVE) lbgreen.pack(side=tkinter.RIGHT) # 本控件实例相对于下一个控件实例靠右放置 lbblue = tkinter.Label(root, text="蓝", fg="blue", relief=tkinter.GROOVE) lbblue.pack(fill=tkinter.X) # 本控件实例向水平方向伸展填充父容器未被占用的空间 root.mainloop() # 2.grid()方法 ''' grid()是基于网格的布局。先虚拟一个二维表格,再在该表格中布局控件实例。 由于在虚拟表格的单元格中所布局的控件实例大小不一,单元格也没有固定或均一的大小,因此其仅用于布局的定位。 grid()方法与pack()方法不能混合使用。 方法grid()常用的布局参数如下。 column:控件实例的起始列,最左边为第0列。 columnspan:控件实例所跨越的列数,默认为1列。 row:控件实例的起始行,最上面为第0行。 rowspan:控件实例所跨越的行数,默认为1行。 ipadx, ipady:控件实例所呈现区域内部的像素数,用来设置控件实例的大小。 padx, pady:控件实例所占据空间的像素数,用来设置控件实例所在单元格的大小。 ''' # 例8-5 用grid()方法排列标签。 # 设想有一个3×4的表格,起始行、列序号均为0。将标签lbred置于第2列第0行;将标签lbgreen置于第0列第1行; # 将标签lbblue置于第1列起跨2列第2行,占20像素宽 import tkinter root = tkinter.Tk() lbred = tkinter.Label(root, text="Red", fg="red", relief=tkinter.GROOVE) lbred.grid(column=2, row=0) # 将标签lbred置于第2列第0行 lbgreen = tkinter.Label(root, text="绿色", fg="green", relief=tkinter.GROOVE) lbgreen.grid(column=0, row=1) # 将标签lbgreen置于第0列第1行 lbblue = tkinter.Label(root, text="蓝", fg="blue", relief=tkinter.GROOVE) lbblue.grid(column=1, columnspan=2, ipadx=20, row=2) # 将标签lbblue置于第1列起跨2列第2行,占20像素宽 root.mainloop() # 3.place()方法 ''' place()方法根据控件实例在父容器中的绝对或相对位置参数进行布局。 其常用布局参数如下: x, y:控件实例在根窗体中水平和垂直方向上布局的起始位置(单位为像素)。注意,根窗体左上角为0,0,水平向右、垂直向下为正方向。 relx, rely:控件实例在根窗体中水平和垂直方向上起始布局的相对位置。即相对于根窗体宽和高的比例位置,取值在0.0~1.0之间。 height, width:控件实例本身的高度和宽度(单位为像素)。 relheight, relwidth:控件实例相对于根窗体的高度和宽度比例,取值在0.0~1.0之间。 利用place()方法配合relx, rely和relheight, relwidth参数所得到的界面可自适应根窗体尺寸的大小。 方法place()与方法grid()可以混合使用 ''' # 例8-6 用place()方法排列消息(多行标签) import tkinter root = tkinter.Tk() root.geometry('320x240') msg1 = tkinter.Message(root, text=''' 我的水平起始位置为相对位置(根窗体宽度20%处),垂直起始位置为绝对位置80像素,我的高度是根窗体高度的40%,宽度为200像素 ''', relief=tkinter.GROOVE) msg1.place(relx=0.2, y=80, relheight=0.4, width=200) root.mainloop()
这篇关于cp8_1_1.py的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-18Swoolehe Open Swoole两个有什么区别,分别适用什么环境?-icode9专业技术文章分享
- 2024-10-18宝塔安装l2pt 时候提示l2tp未安装或服务不存在什么原因?-icode9专业技术文章分享
- 2024-10-18wps word文字没对齐怎么调整-icode9专业技术文章分享
- 2024-10-18wps自动换行怎么取消-icode9专业技术文章分享
- 2024-10-18wps word如何设置分页页码-icode9专业技术文章分享
- 2024-10-18在git中 错误操作 “清除贮藏” 如何恢复-icode9专业技术文章分享
- 2024-10-18mingw64怎样安装其他依赖,如pstree等-icode9专业技术文章分享
- 2024-10-18os.Getpid()获取的的id在ps里面找不到对应的进程是什么原因-icode9专业技术文章分享
- 2024-10-18Webpack 构建优化教程:入门指南
- 2024-10-18Webpack-bundle-analyzer教程:快速入门与实践指南