GUI编程之tkinter
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
0. 前言
本文内容为使用Python3的tkinter模块,开发GUI。在阅读本文前,请确保你已经或可能满足以下条件:
电脑中已经安装配置好Python3环境
了解Python3的基础语法,比如导入模块,基础语句,面向对象
学习GUI编程指南:
在这个GUI领域QT横行的年代,依旧有学习tkinter的价值。要学习GUI编程,你大概会经历这样一条路径:
认识tkinter模块,写一个简单GUI程序
认识各种控件、学习布局、使用容器
实战以检验动手能力和想象力
PS:你可能还需要了解一些消息驱动的知识
下面我们进入正式的学习。
- 认识Tkinter模块,写一个简单的GUI程序
import tkinter as tk # 引入tkinter模块,并命名为tk
win = tk.Tk() # 创建主窗口
win.mainloop() # 进入消息循环,显示窗口界面
要是用tkinter,首先引入该模块,为了方便命名为tk。
使用tk的一般套路是,先创建一个主窗口,也就是一个Tk()类, 进行一些列操作之后需,进入消息循环。
现在我们来做点简单的事:
import tkinter as tk # 引入tkinter模块,并命名为tk
win = tk.Tk() # 创建主窗口
win.title(“Hello”) # 标题
win.geometry(“400x400+400+200”) # 大小和位置
text = “Hello, Majesty!” # 要显示的内容
b = tk.Label(win, text=text).pack()
进入消息循环,显示窗口界面
win.mainloop()
你可以将上述代码保存在一个扩展名为pyw的的文件里,这样,这个程序可以双击启动,而且在启动时不会开始命令行(也就是不会弹出小黑框)。体验一下你就知道我在说什么了~
- 认识控件
在上边的代码中我们使用了Label控件,Label控件是Tk最常用的组件之一,可以用来显示文本和图片等。在tkinter中,一共提供了15个控件,下面我们来认识一下它们。
控件名称
描述
Button
按钮控件;在程序中显示按钮。
Canvas
画布控件;在窗口中画图,如线条等元素
Checkbutton
多选框控件;用于在程序中提供多项选择框
Entry
输入控件;用于显示简单的文本内容
Frame
框架控件;在屏幕上定义一个区域,用来作为容纳其他控件的容器
Label
标签控件;可以显示文本和位图
Listbox
列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton
菜单按钮控件,由于显示菜单项。
Menu
菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message
消息控件;用来显示多行文本,与label比较类似
Radiobutton
单选按钮控件;显示一个单选的按钮状态
Scale
滑动条控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar
滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text
文本控件;用于显示多行文本
Toplevel
容器控件;用来提供一个单独的对话框,和Frame比较类似
除此之外,你可能还需要了解一下上述控件都具有的共同属性,如下表:
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
属性
描述
anchor
锚位:定位控件在窗口子内的位置。
background(bg)
背景颜色:用来定义控件的背景颜色
bitmap
位图:定义显示在控件中位图文件
borderwidth
边框宽度:定义控件的边框宽度
command
命令:指定特定的函数
cursor
光标:当鼠标指针经过控件时鼠标指针的类型
font
控件字体:用来定义控件上显示的字体,包括字体,大小,样式
foreground(fg)
前景颜色:定义控件的前景(字体)颜色
height
高度:定义控件的高度
image
图像:定义显示在控件内的图片文件
justify
对齐:定义多行文字标题的排列方式
padx
水平距离:定义控件内文字或图片与控件边框之间的水平距离。
pady
垂直距离:定义控件内文字或图片与控件边框之间的垂直距离。
relief
边框形式:定义控件的边框形式,比如2D或者3D
text
文字:定义控件的标题文字
variable
变量:将控件的数值映射到一个变量上。
width
宽度:定义控件的宽度
关于以上属性的注意点:
anchor:可以是N、S、E、W、NE、SW、SE、NW、CENTER,关于是什么意思,请去好好学学英语吧。
bg、fg:建议使用通用的“#rrggbb”,形式的数字,如,“#fffffff”。
cursor:是指针类型,可以是:crosshair、watch、xterm、fleur、arrow。
font:使用时,要赋予一个元组如 font=(“Times”, 8, ‘bold’),分别代表,字体,大小和样式,字体请查看,系统默认安装的字体,样式可以是bold、italic、underline、overstrike。
justify:可以是LEFT、CENTER、RIGHT。
relief:如果为2D,可以是FLAT、SOLID,如果是3D,可以是SUNKEN、RIDGE、RAISED。
了解了上述属性之后,你可能还需要了解一下tk的布局管理器tk提供了三种布局方式的布局管理器,分别是pack()、grid()、place()
布局方法
描述
pack()
包装:按照添加的顺序,自动分配到合适的位置上
grid()
网格:按照空间,(行/列)布局成一个表格的样子
place()
位置:允许自定义组件的大小和位置
现在让我们与这些控件与布局来一一过招吧。
- 按钮控件:Button
Button()组件用来创建一个按钮,按钮内可以显示文字或者图片!
下面我们来使用Button():
from tkinter import Button
b = Button(win, text=“close”, command=win.quit).pack()
Button控件中有以下几种方法:
方法/属性
描述
flash()
将前景与背景颜色呼唤来产生闪烁效果
invoke()
执行command所定义的函数
activebackground
定义按钮在作用中的背景颜色
activeforeground
定义按钮在作用中的前景颜色
default
如果设置此属性,则此按钮为默认按钮
compound
文本和图像的混合模式
disableforeground
按钮不可用时的前景色
overrelief
鼠标飘过按钮时的鼠标样式
state
指定按钮的状态
takefocus
使用Tab改变按钮焦点,默认开启
underline
文字加下划线
下面看个demo:
Button(win, text=“0”, underline=0,command=win.quit).pack() # 下划线
Button(win, text=“1”,
activeforeground="#ff00ff",
activebackground="#00ff00",
state=“active”).pack() # 设置作用中的背景色与前景色,状态设置为作用中
对其他属性感兴趣的读者,可以自己尝试一下其他属性,限于篇幅小编在这里就不赘述了~
- 画布控件:Canvas
画布控件,是可以在其上画图像的控件,可以在其上创建图像,如直线,矩形,椭圆等。
下列是Canvas控件中的方法:
Method/Attribute
Description
create_arc(coord, start, extent, fill)
创建弧形(扇形)coord定义左上角与右下角的坐标start是起始角度extent是结束角度(逆时针)fill是填充色
create_bitmap(x, y, bitmap)
创建一个位图
create_image(x, y, image)
创建一张图片image需要时PhotoImage或BitmapImage类的实例变量
create_line(x0, y0, … , xn,yn, options)
创建一条线,xn,yn是线上的点。
create_oval(x0, y0, x1,y1, options)
创建一个圆形或者椭圆
create_polygon(x0, y0, … , xn,yn, options)
穿件一个至少三个点的多边形
create_rectangle(x0, y0, … , xn,yn, options)
创建一个矩形
create_text(x0, y0, text, options)
创建一个字符串
下面来看一个demo:
from tkinter import Canvas as C
win = tk.Tk()
coord = 50,50,200,200
c = C(win)
c.create_arc(coord, start=0, extent = 120, fill=“red”)
c.pack()
win.mainloop()
接下来创建位图:
c = C(win)
c.create_bitmap(40,40, bitmap=“error”)
c.pack()
创建图片:
from tkinter import Canvas as C
from tkinter import PhotoImage
win = tk.Tk()
c = C(win)
img=PhotoImage(file=“image.png”)
c.create_image(100,100, image=img)
c.pack()
win.mainloop()
创建一条线:
from tkinter import Canvas as C
win = tk.Tk()
c = C(win)
c.create_line(40,40, 300,40, 90,120, width=2, fill="#ff00ff")
c.pack()
win.mainloop()
创建一个圆:
from tkinter import Canvas as C
win = tk.Tk()
c = C(win)
c.create_oval(50,50, 250,250,fill=‘green’, outline=“blue”)
c.pack()
win.mainloop()
创建多边形(如三角形):
from tkinter import Canvas as C
win = tk.Tk()
c = C(win)
c.create_polygon(10,10, 320,80, 150,150, outline=‘black’)
c.pack()
win.mainloop()
创建矩形:
from tkinter import Canvas as C
win = tk.Tk()
c = C(win)
c.create_rectangle(10,10, 220,220,outline=‘black’)
c.pack()
win.mainloop()
创建文本:
from tkinter import Canvas as C
win = tk.Tk()
c = C(win)
c.create_text(10,10,text=“Hello , 前面的demo亲手做一遍了么?” ,anchor=‘w’)
c.pack()
win.mainloop()
- 复选框控件:Checkbutton
Checkbutton用来创建复选框。
from tkinter import Checkbutton
win = tk.Tk()
cb1 = Checkbutton(win, text=“篮球”).pack()
cb2 = Checkbutton(win, text=“足球”).pack()
cb3 = Checkbutton(win, text=“网球”).pack()
win.mainloop()
Checkbutton
Checkbutton的属性和方法如下:
Method/Attribute
Description
onvalue、offvalue
指定variable属性所指定的变量所要存储的数值。选中设置为onvalue未选中为offvalue
indicatoron
将此属性设置成零,可以将整个控件变成复选框
select()
将复选框的值变为onvalue
flash()
闪烁效果,同Button
invoke()
指定command,同Button
toggle()
改变核取状态的按钮
PS:上述方法,请在pack()之前使用。
- 输入控件:Entry
Entry控件用来创建一个单行的文本框。
该控件内有以下属性/方法:
Method/Attribute
Description
show
为输入文字时显示在控件内的内容
get()
读取控件内的文字
下面看一个demo:
from tkinter import Label
from tkinter import Entry
from tkinter import Button
win = tk.Tk()
Label(win, text=“请输入密码:”).pack()
e = Entry(win, show=’’)
e.pack()
label = Label(win)
label.pack()
def do():
label.config(text=e.get())
button = Button(win, text=“OK”, command=do)
button.pack()
win.mainloop()
demo中使用了Label、Entry、Button三个控件,功能大概是这样,输入密码,会显示"",按确定会在Label上显示输入内容。
- 标签控件:Label
在前文已经数次用到了Label控件,它的作用类似于print()函数,它将文本打印在窗口体上。
在这里就不多说了。
from tkinter import *
root = Tk()
Label(root, text=“red”, bg=“red”, fg=“white”).pack(side=LEFT)
Label(root, text=“green”, bg=“green”, fg=“black”).pack(side=LEFT)
Label(root, text=“blue”, bg=“blue”, fg=“white”).pack(side=LEFT)
mainloop()
8. 列表框控件:Listbox
Listbox用来创建一个列表框,列表框内包含很多选项,用户可以选择一项或者多项。
from tkinter import Listbox
win = tk.Tk()
name = [‘蹦床’,“射箭”,“攀岩”]
listbox = Listbox(win)
for i in name:
listbox.insert(‘end’, i)
listbox.pack()
win.mainloop()
Listbox控件中提供了下列方法/属性(仅列举常用的几个):
Method/Attribute
Description
activate(index)
将给定索引号对应的选项激活(在其文本下方画一条下划线)
delete(first, last=None)
删除参数 first 到 last 范围内的所有选项
get(first, last=None)
返回包含参数 first 到 last 范围内的所有选项的文本的元组
index(index)
返回参数index选项的序号
insert(index, *elements)
添加一个或多个项目到 Listbox 中
size()
返回 Listbox 组件中选项的数量
‘end’
表示列表末尾
- 菜单控件:Menu
可以用来创建三种菜单,即主菜单、 下拉菜单、快捷式菜单。
主菜单
from tkinter import Menu
def doSth():
pass
win = tk.Tk()
win.title(“Menu”)
win.geometry(“400x400”)
mainmenu = Menu(win)
mainmenu.add_command(label=“file”, command=doSth)
mainmenu.add_command(label=“edit”, command=doSth)
mainmenu.add_command(label=“view”, command=doSth)
mainmenu.add_command(label=“window”, command=doSth)
mainmenu.add_command(label=“tool”, command=doSth)
mainmenu.add_command(label=“help”, command=doSth)
win.config(menu=mainmenu)
win.mainloop()
下拉菜单
import tkinter as tk
from tkinter import Menu
def doSth():
pass
win = tk.Tk()
win.title(“Menu”)
win.geometry(“400x300”)
mainmenu = Menu(win)
filemenu = Menu(mainmenu, tearoff=0)
filemenu.add_command(label=‘New’, command=doSth)
filemenu.add_command(label=‘Save’, command=doSth)
filemenu.add_separator()
filemenu.add_command(label=‘Quit’, command=doSth)
mainmenu.add_cascade(label=“file”, menu=filemenu)
mainmenu.add_command(label=“edit”, command=doSth)
mainmenu.add_command(label=“view”, command=doSth)
mainmenu.add_command(label=“window”, command=doSth)
mainmenu.add_command(label=“tool”, command=doSth)
mainmenu.add_command(label=“help”, command=doSth)
win.config(menu=mainmenu)
win.mainloop()
快捷菜单
win = tk.Tk()
win.title(“Menu”)
win.geometry(“400x200”)
mainmenu = Menu(win)
pmenu = Menu(win, tearoff=0)
def showpmenu(event):
pmenu.post(event.x_root, event.y_root)
win.bind("", showpmenu)
win.mainloop()
- 消息控件:Message
与Label类似,是用来显示文字的空间,但Message控件用来显示多行不可编辑的文字,且它可以自动编排文字的位置。
import tkinter as tk
from tkinter import Message
win = tk.Tk()
txt = “这是一个长长的字符串,这是一个长长的字符串,这是一个长长的字符串,这是一个长长的字符串,这是一个长长的字符串。”
Message(win,text=txt).pack()
win.mainloop()
- 单选按钮:Radiobutton
与Checkbutton类似,只不过Checkbutton是可以单选,也可以多选,而Radiobutton是单选。
import tkinter as tk
from tkinter import Radiobutton
win = tk.Tk()
sex=[‘男’,‘女’]
Radiobutton(win, text=sex[0],value=0).pack(anchor=‘w’)
Radiobutton(win, text=sex[1],value=1).pack(anchor=‘w’)
win.mainloop()
- 滑动条控件:Scale
Scale控件可以创建一个游标尺一样的滑动条。
from tkinter import Scale
win = tk.Tk()
Scale(win, from_=0, to=10).pack()
win.mainloop()
- 滚动条控件:Scrollbar
import tkinter as tk
from tkinter import Scrollbar
from tkinter import Listbox
win = tk.Tk()
sb1 = Scrollbar(win)
sb2 = Scrollbar(win, orient=‘horizontal’)
sb1.pack(side=‘right’, fill=‘y’)
sb2.pack(side=‘bottom’, fill=‘x’)
lb = Listbox(win, yscrollcommand=sb1.set, xscrollcommand=sb2.set)
for i in range(1000):
lb.insert(‘end’, str(i)*100)
lb.pack(side=‘left’, fill=‘both’)
sb1.config(command=lb.yview)
sb2.config(command=lb.xview)
win.mainloop()
- 文本框控件:Text
Text控件用来创建一个文本框,文本框的内容可以是多行,格式化的,用户可以修改文本框中的内容。经常别用作文本浏览器或者网页浏览器。
from tkinter import Text
win = tk.Tk()
Text(win, width=100, height=30).pack()
win.mainloop()
- 菜单按钮控件:Menubutton
from tkinter import *
win = Tk()
def doSth():
pass
mb = Menubutton(win, text=“点我”, relief=RAISED)
mb.pack()
filemenu = Menu(mb, tearoff=False)
filemenu.add_command(label=“打开”, command=doSth)
filemenu.add_command(label=“保存”, command=doSth)
filemenu.add_separator()
filemenu.add_command(label=“退出”, command=win.quit)
mb.config(menu=filemenu)
mainloop()
- 框架控件:Frame
Frame控件是在屏幕上的一个矩形区域。其主要作用是作为其他组件的框架基础,或为其他组件提供间距填充。
from tkinter import *
Label(text=“标签1”).pack()
separator = Frame(height=12, bd=1, relief=SUNKEN)
separator.pack(fill=X, padx=5, pady=5)
Label(text=“标签2”).pack()
mainloop()
其他控件也可以附着在Frame上。
Label(text=“标签1”).pack()
f = Frame(height=12, bd=12,relief=‘sunken’)
Label(f, text=“标签2”).pack()
f.pack(padx=5, pady=5)
mainloop()
- 独立窗口控件:Toplevel
from tkinter import *
root = Tk()
def create_toplevel():
top = Toplevel()
top.title(“Toplevel”)
msg = Message(top, text="Here is a window of toplevel!")
msg.pack()
Button(root, text=“创建独立窗口”, command=create_toplevel).pack()
mainloop()
GUI编程之tkinter相关推荐
- pyhton GUI编程之Tkinter详细讲解二
文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...
- python gui入门的例子_Python GUI编程之Tkinter入门之道
相信刚学习使用Python进行GUI编程的时候,肯定都会听过Tkinter,毕竟是standard Python interface to the Tk GUI toolkit.用来写一些小程序还是很 ...
- java paint的使用_java GUI编程之paint绘制操作示例
本文实例讲述了java GUI编程之paint绘制操作.分享给大家供大家参考,具体如下: import java.awt.*; public class Testpint { public stati ...
- 【AWT编写图形用户界面】GUI编程之AWT讲解(看不懂你来打我)
JDK中提供了AWT和Swing两个包,用于GUI(图形用户界面)程序的设计和开发.下面为大家介绍一下用AWT如何进行GUI编程. 文章目录 1 AWT 2 内部类和匿名类 3 Frame 4 布局管 ...
- Python GUI编程之PyQt5入门到实战
文章目录 1. PyQt5基础 1.1 GUI编程学什么 1.2 PyQT是什么 1.3 PyQT的优势 1.4 开发环境的安装 1.5 第一个pyqt5桌面应用 2. QtDesigner的使用 2 ...
- Java GUI编程之AWT和Swing
目的:为了了解MVC架构,了解监听,我们有必要学习Java GUI 编程. 一. AWT:抽象窗口工具箱. 1.弹出窗口实例: package GUI;import java.awt.*;public ...
- jtable如何从表格中定位_Java Swing组件编程之JTable表格用法实例详解
本文实例讲述了Java Swing组件编程之JTable表格用法.分享给大家供大家参考,具体如下: 表格是GUI编程中使用较多,但也是最麻烦的一个控件之一.表格是用来显示二维数据,提供编辑,选择等功能 ...
- 与小卡特一起学python 豆瓣_《父与子的编程之旅:与小卡特一起学Python》
原标题:<父与子的编程之旅:与小卡特一起学Python> 内容简介 本书是一本家长与孩子共同学习编程的入门书.作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安 ...
- 看完知乎轮子哥的编程之路,我只想说,收下我的膝盖...
点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 作者:vczh 来源:https://dwz.cn/sWwZoQEl vczh,本名陈 ...
最新文章
- 【从零学习openCV】IOS7下的人脸检測
- 优化应用不可不知道的知识
- 51nod 1572 宝岛地图 (预处理四个方向的最大步数优化时间,时间复杂度O(n*m+k))
- inbox status and ServiceOrder Status
- 按键精灵调用迅雷下载文件
- 策划入门(一)什么样的创意是可行的
- AspNetPager 万能分页存储过程(转来的)
- 学习.net设计规范记录
- MT6763芯片资料MT6763处理器性能介绍下载
- 恶意代码防范技术原理-计算机病毒和特洛伊木马分析与防护
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)
- 企业微信与视频号裂变如何做私域运营?
- mysql中两点之间距离的计算
- 云服务器上行带宽/下行带宽/出网带宽/入网带宽详解(一看就懂)
- 安卓平板硬件测试软件,《安兔兔硬件检测》:必备的系统工具
- tftpd32.exe的安装
- Cerebral Cortex:疼痛热刺激引起的脑功能网络分离与整合
- MMDetection3D 1.1:统一易用的 3D 感知平台
- Whitelabel Error Page 的原因分析
- 这个AI算法,可以帮“元宇宙”虚拟人进行虚拟更换衣服