Python GUI编程之Tkinter
GUI编程Tkinter
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:
- Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。
 - wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。
 - Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。
 
from tkinter import *
root = Tk()                                        # 创建窗口对象的背景色
li = ['C','python','php','html','SQL','java']
listb  = Listbox(root)                            #  创建列表组件
for item in li:                                   #  第一个小部件插入数据
    listb.insert(0,item)
listb.pack()                                      #  将小部件放置到主窗口中
root.mainloop()                                    #  进入消息循环
Tkinter 组件
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
| 控件 | 描述 | 
|---|---|
| Listbox | 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 | 
| Menubutton | 菜单按钮控件,用于显示菜单项 | 
| Menu | 菜单控件;显示菜单栏,下拉菜单和弹出菜单 | 
| Message | 消息控件;用来显示多行文本,与label比较类似 | 
| Radiobutton | 单选按钮控件;显示一个单选的按钮状态 | 
| Scale | 范围控件;显示一个数值刻度,为输出限定范围的数字区间 | 
| Scrollbar | 滚动条控件,当内容超过可视化区域时使用,如列表框。. | 
| Text | 文本控件;用于显示多行文本 | 
| Toplevel | 容器控件;用来提供一个单独的对话框,和Frame比较类似 | 
| Spinbox | 输入控件;与Entry类似,但是可以指定输入范围值 | 
| PanedWindow | PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。 | 
| LabelFrame | labelframe 是一个简单的容器控件。常用与复杂的窗口布局。 | 
| tkMessageBox | 用于显示你应用程序的消息框。 | 
标准属性
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
| 属性 | 描述 | 
|---|---|
| Dimension | 控件大小 | 
| Color | 控件颜色 | 
| Font | 控件字体 | 
| Anchor | 锚点 | 
| Relief | 控件样式 | 
| Bitmap | 位图 | 
| Cursor | 光标 | 
几何管理
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置
| 几何方法 | 描述 | 
|---|---|
| pack() | 包装 expand=1控件随窗口缩放,放置在中央 | 
| grid() | 网格 | 
| place() | 位置 | 
1.Button按钮组件
w = Button ( master , option=value , ... )
master: 按钮的父容器
1.1 options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。
- bg 按钮的颜色
 - activebackground 当鼠标点击时按钮的背景色
 - fg 按钮文本的颜色
 - activeforeground 当鼠标点击时按钮文本的颜色
 - bd 按钮边框的大小,默认为 2 个像素
 - command 按钮关联的函数,当按钮被点击时,执行该函数
 - font 文本字体
 - height 按钮的高度
 - width 按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小)
 - highlightcolor 要高亮的颜色
 - image 按钮上要显示的图片
 - justify 显示多行文本时设置不同行之间的对齐方式,可选LEFT,RIGHT, CENTER
 - padx 按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离
 - pady 按钮在y轴方向上的内边距(padding)
 - relief 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT
 - state 设置按钮组件状态,可选的有NORMAL、ACTIVE、 DISABLED。默认NORMAL
 - underline下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
 - wraplength 限制按钮每行显示的字符的数量
 - text 按钮的文本内容
 - anchor 锚选项,控制文本的位置,默认为中心,n,nw,ne,s,nw,ne,center
 
1.2 组件常用方法
- deselect() 清除单选按钮的状态
 - flash() 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态。
 - invoke() 可以调用此方法来获得与用户单击单选按钮以更改其状态时发生的操作相同的操作
 - select() 设置单选按钮为选中。
 
1.3 示例
import tkinter
import tkinter.messagebox as tkMessageBox
from PIL import Image,ImageTk
root = tkinter.Tk()
root.title("wenyu`s window")
root.geometry("300x500")
def hello():
   tkMessageBox.showinfo( "Hello wenyu","Hello wenyu")
imga=Image.open("benxi.jpg")
img=ImageTk.PhotoImage(imga)
B = tkinter.Button(root,activebackground="yellow",activeforeground="green",bd="2",bg="pink",command = hello,fg="white",font="Arial",height="2",
width="8",highlightcolor="pink",padx="0",pady="0",wraplength="1",justify="left",state="normal",underline="1",text ="菜单")
B.pack()
root.mainloop()
2. Canvas画布
w = Canvas ( master, option=value, ... )
2.1 options
bd , bg , height , highlightcolor , width ,
- confine 如果为 true (默认), 画布不能滚动到可滑动的区域外
 - cursor 光标的形状设定,如arrow, circle, cross, plus 等
 - relief 边框样式,可选值为FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认FLAT
 - scrollregion 一个元组 tuple (w, n, e, s) ,定义了画布可滚动的最大区域,w 为左边,n 为头部,e 为右边,s 为底部
 - xscrollincrement 用于滚动请求水平滚动的数量值
 - xscrollcommand 水平滚动条,如果画布是可滚动的,则该属性是水平滚动条的 .set()方法
 - yscrollincrement 类似 xscrollincrement, 但是垂直方向
 - yscrollcommand 垂直滚动条
 
2.2 Canvas 组件支持以下标准选项:
- arc − 创建一个扇形
 
canvas=Canvas(root,bg='pink',width=500,height=500)    #初始化canvas
canvas.pack()
coord = 50, 50, 200, 200             #坐标起始点
arc = canvas.create_arc(coord, start=0, extent=90, fill="white",style=PIESLICE,dash=(15,2,5,2),outline='red',width=10)
start: 从x轴正方向(起始方向)开始,单位为度进行绘制
extent: 以start参数给定的角度开始,逆时针延伸角度
create_arc 参数style、dash、outline、width:
- style 参数有 ARC、CHORD 以及 PIESLICE;默认情况下为 PIESLICE
 - dash 参数类型为元组,用于设定虚线线段。例如 dash=(3,4) 中,值3为指定绘制多少个像素的线段,值4为下一条线段绘制需要间隔多少个像素
 - outline 用于设置绘制的线段颜色,默认为黑色
 - width设置绘制成的图形边框的粗细,默认单位为像素
 
- image − 创建图像
 
canvas=Canvas(root,bg='pink',width=500,height=500)
canvas.pack()
imga=Image.open("benxi.jpg")
image=ImageTk.PhotoImage(imga)
img=canvas.create_image(5,5,anchor=NW,image=image)
- line − 创建线条
line = canvas.create_line(x0, y0, x1, y1, ..., xn, yn, options)
line=canvas.create_line(5,5,500,500,fill='white') - oval − 创建一个圆
oval = canvas.create_oval(x0, y0, x1, y1, options)
oval=canvas.create_oval(100,100,200,200,fill='white') - polygon − 创建一个至少有三个顶点的多边形
oval = canvas.create_polygon(x0, y0, x1, y1,...xn, yn, options)
oval=canvas.create_polygon(100,100,100,200,200,100,fill='white') 
2.3 实例
from tkinter import *
import tkinter.messagebox as tkMessageBox
root=Tk()
cv = Canvas(root,bg='white')       # 创建一个矩形,指定画布的颜色为白色
cv.create_rectangle(50,50,150,150)
cv.pack()
root.mainloop()
3. Checkbutton复选框
w = Checkbutton ( master, option=value, ... )
options: activebackground, activeforeground, bg, bitmap位图,bd,command,cursor, disabledforeground 禁用前景色,font,fg,height,highlightcolor,image是否使用图标,justify,padx,pady,relief,selectcolor,selectimage选中后图片,state,text,underline,width,wraplength,variable=1选中,offvalue,onvalue状态
- variable 默认设置为1表示选中状态,反之设置为 0。可以使用 onvalue 和 offvalue 选项修改值
 
var=StringVar()
var.set("T")
c1=Checkbutton(root,text="biu",variable=var,onvalue="T",offvalue="F",height=5,width=20)
c1.pack()
3.1 方法
- deselect() 取消组件的选中状态,设置 variable 为 offvalue.
 - flash() 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态
 - invoke() 调用command 选项指定的函数或方法,并返回函数的返回值
 - select() 设置按钮为选中,设置 variable 为 onvalue
 - toggle() 切换 Checkbutton 组件的状态(选中 -> 未选中 / 未选中 -> 选中)
 
3.2 实例
from tkinter import *
import tkinter.messagebox as tkMessageBox
root=Tk()
var=IntVar()
c1=Checkbutton(root,text="biu",variable=var,onvalue=1,offvalue=0,height=5,width=20)
c1.pack()
root.mainloop()
4. Entry文本框
w = Entry( master, option, ... ) 用来让用户输入一行文本字符串
options: bg, bd, cursor, font, fg, highlightcolor, justify, relief, selectbackground, selectborderwidth, selectforeground, state, width, xscrollcommand
- exportselection 默认情况下,如果在输入框中选中文本,默认会复制到粘贴板,如果要忽略这个功能设置 exportselection=0
 - show 指定文本框内容显示为字符,值随意,满足字符即可。如密码可以将值设为 show="*"
 - textvariable 文本框的值,是一个StringVar()对象
 
4.1 方法
- delete ( first, last=None ) #删除文本框里位置值
 - get() 获取文件框的值
 - icursor ( index ) 将光标移动到指定索引位置,只有当文框获取焦点后成立
 - index ( index ) 返回指定的索引值
 - insert ( index, s ) 向文本框中插入值
 - select_adjust ( index ) 选中指定索引和光标所在位置之前的值
 - select_clear() 清空文本框
 - select_from ( index ) 设置光标的位置
 - select_present() 如果有选中,返回 true,否则返回 false
 - select_range ( start, end ) 选中指定索引位置的值
 - select_to ( index ) 选中指定索引与光标之间的值
 - xview ( index ) 该方法在文本框链接到水平滚动条上很有用。
 - xview_scroll ( number, what ) 用于水平滚动文本框。 what 参数可以是 UNITS, 按字符宽度滚动,或者可以是 PAGES, 按文本框组件块滚动。 number 参数,正数为由左到右滚动,负数为由右到左滚动。
 
4.2 实例
from tkinter import *
root=Tk()
L=Label(root,text="网站名")
L.pack(side=LEFT)
E=Entry(root,bd=5)
E.pack(side=RIGHT)
root.mainloop()
5. Frame框架
w = Frame ( master, option, ... ) 在屏幕上显示一个矩形区域,多用来作为容器。
options:bg, bd, cursor, height, highlightbackground, highlightcolor, highlightthickness, relief, width,
- takefocus 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来),默认为 false
 
5.1 实例
from tkinter import *
root=Tk()
def say_hi():
    print("hello!")
frame=Frame(root)
hi=Button(frame,text="say hi",command=say_hi)
hi.pack()
frame.pack(padx=1,pady=1)
root.mainloop()
6. Label
w = Label ( master, option, ... ) 标签控件(Label)指定的窗口中显示的文本和图像
options:anchor, bg, bd, bitmap, cursor, font, fg, height, image, justify, pady, padx, relief, text, textvariable, underline, width, wraplength
6.1 实例
from tkinter import *
root=Tk()
w = Label(root, text="Hello WENYU!")
w.pack()
root.mainloop()
												
											Python GUI编程之Tkinter的更多相关文章
- pytho GUI编程之Tkinter
		
摘录 python核心编程s GUI(Graphical User Interface)图形用户界面. Tcl.Tk和Tkinter Tkinter是python的默认GUI库.它基于Tk工具包,该工 ...
 - Python GUI编程之WxPython
		
https://en.wikipedia.org/wiki/WxPython 官网: Overview of wxPython: https://wxpython.org/pages/overview ...
 - Python 多进程编程之multiprocessing--Pool
		
Python 多进程编程之multiprocessing--Pool ----当需要创建的子进程数量不多的时候,可以直接利用multiprocessing 中的Process 动态生成多个进程, -- ...
 - Python 多进程编程之multiprocessing--Process
		
Python 多进程编程之multiprocessing 1,Process 跨平台的进程创建模块(multiprocessing), 支持跨平台:windowx/linux 创建和启动 创 ...
 - python并发编程之Queue线程、进程、协程通信(五)
		
单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...
 - python并发编程之gevent协程(四)
		
协程的含义就不再提,在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块.由于协程对于操作系统是无感知的,所以其切换需要程序员自己去完成. 系列文章 python并发编程 ...
 - python并发编程之asyncio协程(三)
		
协程实现了在单线程下的并发,每个协程共享线程的几乎所有的资源,除了协程自己私有的上下文栈:协程的切换属于程序级别的切换,对于操作系统来说是无感知的,因此切换速度更快.开销更小.效率更高,在有多IO操作 ...
 - python并发编程之multiprocessing进程(二)
		
python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. 系列文章 python并发编程之threading线程(一) python并 ...
 - python并发编程之threading线程(一)
		
进程是系统进行资源分配最小单元,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.进程在执行过程中拥有独立的内存单元,而多个线程共享内存等资源. 系列文章 py ...
 - Python函数式编程之map()
		
Python函数式编程之map() Python中map().filter().reduce()这三个都是应用于序列的内置函数. 格式: map(func, seq1[, seq2,…]) 第一个参数 ...
 
随机推荐
- stl算法汇总
 - [部署日记]GO在Visual Studio Code初次运行时提示The "gopls" command is not available. Run "go get -v golang.org/x/tools/gopls" to install.
			
本以为VSC在商城装上插件后就能拎包入住,F5的时候我当场好家伙 于是无脑Install... Installing github.com/nsf/gocode FAILED Installing g ...
 - thinkphp5.0 分页用法
			
$num = input('get.page')?input('get.page'):1; //接收参数 //数据的总数量 $count = Db::name('user')->where([' ...
 - Treetop Lights使用条款与免责协议
			
Treetop Lights (以下简称"我们")在此特别提醒您务必认真阅读.充分理解本<使用条款与免责协议>(以下简称"本协议")中各条款并选择是 ...
 - py06
			
元祖tuple 与列表类似可以存多个值,但是不同的是元祖本身不能被修改 #一:基本使用:tuple# 1 用途:记录多个值,当多个值没有改的需求,此时用元组更合适 # 2 定义方式:在()内用逗号分隔 ...
 - window操作
			
1.进入目录 cd ... 2. 进入D盘 D: 3.读取文件内容 type file
 - win11 改键盘映射
			
编辑注册表:按下win+r,输入regedit找到这个路径HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ Keyboard Layout ...
 - vue v-if不生效
			
正确写法 <block v-for="(item, index) in imgArray"> <image :src="item" class ...
 - How to Fix SSH Failed Permission Denied
			
https://phoenixnap.com/kb/ssh-permission-denied-publickey
 - 解决GitHub网页githubusercontent地址无法访问问题
			
问题 解决GitHub网页githubusercontent地址无法访问问题 解决方法: 参考链接:https://zhuanlan.zhihu.com/p/107691233 注意 安装有火绒的,可 ...