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

【pythonGUI专题】tkinter库的学习与使用(一)

程序员文章站 2022-04-11 17:49:18
...
tkinter是python的标准GUI库,无需额外下载,安装好python即可使用。

  先用一个实例来初步体会 tkinter 库的使用方法.
  

import tkinter
window = tkinter.Tk()       # 用Tk()方法创建主窗口
window.title(string = '窗口标题')
background = tkinter.Label(window,text = '窗口内容在此')
background.pack()           #pack()方法用来设置窗口位置,大小等选项
tkinter.Button(window,text=("关闭"),command= window.quit).pack(side='bottom')
window.mainloop()

  如果想让GUI应用程序能够在Windows下单独执行,必须将程序保存为.pyw文件,这样可以使用pythonw.exe来执行GUI应用程序,而不必打开python解释器,这样方便很多.

tkinter 包含15个控件, 这里列举出来方便忘记时查看:

控件名称 控件说明
Button 按钮控件;在程序中显示按钮。
Canvas 画布控件;显示图形元素如线条或文本,用来画图形
Checkbutton 多选框控件;用于在程序中提供多项选择框
Entry 输入控件;单行文字域,用来收集键盘输入文本
Frame 框架控件; 在屏幕上显示一个矩形区域,多用来作为其他控件的容器
Label 标签控件; 定义一个文字或者是图片标签
Listbox 列表框控件;一个选项列表, 用来显示一个字符串列表给用户, 用户可以从中选择
Menu 菜单控件;用来定义菜单栏,下拉菜单和弹出菜单
Menubutton 菜单按钮控件,用于显示菜单项。
Message 消息控件;用来显示多行文本,与label比较类似, 用于定义对话框
Radiobutton 单选按钮控件;定义一个单选的按钮
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,用于定义一个滚动条
Text 文本控件;用于显示多行文本
Toplevel 容器控件;和Frame比较类似,此控件有自己的最上层窗口,可以提供窗口管理接口
注意在tkinter中测量控件的大小都是默认以像素为单位的,如果要使用其他单位,要自己写上单位:

c(厘米), m(毫米), i(英寸), p(点, 1p = 1/72 i)

共有属性:

对于tkinter的每一个控件,都具有如下几个属性:

anchor 定义控件在窗口内的位置或者文字信息在控件内的位置,可以是N, NE, E, SE, S, SW, W, NW 和CENTER
background(bg) 定义控件的背景颜色,可以是16进制的RGB颜色区间[#000000,#ffffff],在windows环境下可以设置系统自带的”颜色名称常量”
bitmap 定义显示在控件内的位图(bitmap图片文件)
borderwidth 定义控件的边框宽度,单位为像素
command 当控件有特定的动作发生时,定义这个属性(最常见的就是”关闭”按钮按下让窗口关闭)
cursor 定义当鼠标指针移动到这个控件上的时候鼠标指针的类型(常见的有 crosshair,watch(等待常用),xterm(文本编辑),fleur(拖拽),arrow(默认))
font 如果控件支持标题文字,那么就可以对文字进行设置.font属性是一个元组格式:(字体,大小,字体样式). 字体样式有如下选择: bold, italic, underline,overstrike
relief 定义控件的边框形式,对于2D形式的边框,此属性可以是FLAT,SOLID,对于3D形式的边框,可以是 flat, groove, raised, ridge, solid, or sunken
variable 将控件的数值映射给一个变量,由变量的类型来设置这个属性如StringVar, IntVar, DoubleVar, BooleanVar, 这些变量可以由get(),set()方法读取和设置
image 定义显示在控件内的图片
justify 定义多行文字标题的排列方式,可以是 left,right,center
padx, pady 这是两个属性,用于定义控件内的文字与控件边框之间的水平或竖直距离,单位是像素
foreground(fg) 定义控件的前景(文字)颜色
height 对于Button,label或者Text控件,这个属性可以定义以”字符数目” 为单位的高度,其他控件则是以”像素”为单位
width 与height对应,只不过是设置宽度
highlightbackground 定义控件没有键盘焦点的时候,画highlight区域的颜色
highlightcolor 定义控件由键盘焦点的时候,画highlight区域的颜色
highlightthickness 定义highlight区域的宽度,单位是”像素”

设置tkinter控件的位置

设置控件的位置有以下几个方法:

  1. pack() : 将控件设置在父控件之前,规划此控件在区块内的几何位置
  2. grid() : 将控件设置在父控件之前,规划此控件成一个类似表格的架构
  3. place() : 将控件放置在父控件的特定位置

    下面简单的调用一下这些方法, 有个初步认识:

pack()方法

  pack()方法按照其内的属性设置,把控件放置在frame控件(窗体)或者窗口内。当设置了frame控件后,就可以把其他控件放入,Frame中储存控件的地方叫parcel
  可设置的属性:
 1. expand: 取值范围[0,1] 。可以让控件使用所有剩下的空间。当窗口大小改变的时候能让控件使用更多的空间。
 2. fill:取值[x,y,both,none(不改变)]。决定控件如何填满parcel控件,这个属性必须在 expand=1 的时候才会有作用 。
 3. ipadx, ipady: 此选项与fill选项共同使用,用于定义窗体内控件与窗体边界的距离,默认单位是像素,可以自己设置单位。
 4. padx, pady : 定义控件之间的距离
 5. side :定义控件放置的位置,可设置为 top, bottom, left, right
 

import tkinter

win = tkinter.Tk() # main windows

# the first frame
framel = tkinter.Frame(win,relief='raised',borderwidth=4)
framel.pack(side = 'top' , fill = 'both', ipadx=10, ipady=10,expand=0)
tkinter.Button(framel,text = 'button 1').pack(side='left',padx=10,pady=10)
tkinter.Button(framel,text = 'button 2').pack(side='left',padx=10,pady=10)

framel = tkinter.Frame(win,relief='groove',borderwidth=2)
framel.pack(side = 'bottom' , fill = 'x', ipadx=10, ipady=10,expand=1)
tkinter.Button(framel,text = 'button 4').pack(side='left',padx=10,pady=10)
tkinter.Button(framel,text = 'button 5').pack(side='left',padx=10,pady=10)

framel = tkinter.Frame(win,relief='ridge',borderwidth=5)
framel.pack(side = 'right' , fill = 'y', ipadx=10, ipady=10,expand=1)
tkinter.Button(framel,text = 'button 3').pack(side='left',padx=10,pady=10)
tkinter.Button(framel,text = 'button 6').pack(side='left',padx=10,pady=10)

win.mainloop()

grid()方法

grid() 方法依照表格的行列方式放置在窗口或窗口内,具有以下属性:
1. row 设置在表格中的第几列
2. column 设置在表格的第几行
3. columnspan 设置控件在表格中合并行的数目
4. rowspan 设置控件在表格中合并列的数目

实例:

import tkinter
win = tkinter.Tk()
framel = tkinter.Frame(win,relief='raised',borderwidth=2)
framel.pack(side='top',fill='both',ipadx = 5,ipady=5,expand=1)
for i in range(5):
    for j in range(5):
        tkinter.Button(framel,text1='('+str(i+1)+','+str(j+1)+')').grid(row=i,column=j)
tkinter.Button(framel,text='test').grid(row=2,column=2)

tkinter.Button(framel,text='test2').grid(row=3,columnspan=4) #(只是挡住了下面的而已)
win.mainloop()

place() 方法

  place()方法设置控件在窗体或者窗口内的绝对位置或者相对位置,具有如下几个属性:
1. anchor : 定义控件在窗体或者窗口内的方位,可选择:‘n、ne、e、se、s、sw、w、nw、center’,默认是左上角nw
2. bordermode: 定义控件的坐标是否考虑边界宽度,分 outside 或者 inside
3. height,width:定义控件的高度和宽度,单位像素
4. x,y :定义控件的绝对水平位置
5. in: 定义控件相对于参考控件的位置
6. relheight,relwidth:定义控件相对于参考控件的高度或宽度
7. relx,rely: 定义控件相对与参考控件的水平,垂直距离

 
参考链接:
Tkinter 控件详细介绍
Python GUI编程(Tkinter)

相关标签: gui tkinter