参考链接:https://blog.csdn.net/qq_37482202/article/details/84201259

Tkinter介绍

Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。

Tkinter由一定数量的模块组成。Tkinter位于一个名为_tkinter(较早的版本名为tkinter)的二进制模块中。Tkinter包含了对Tk的低级接口模块,低级接口并不会被应用级程序员直接使用,通常是一个共享库(或DLL),但是在一些情况下它也被Python解释器静态链接。

导入库:

1 from tkinter import *
2 from tkinter.tix import Tk, Control, ComboBox # 升级的组合控件包

在进行界面绘制之前需要初始化Tk()

root = Tk()  # 初始化tk

root便是布局的根节点了,以后的布局都在它之上

1     # 设置窗口标题
2 root.title("hello tkinter")
3 # 设置窗口大小 注意:是X 不是*
4 root.geometry("1024x768")
5 # 设置窗口是否可以变化长/宽,False不可变,True可变
6 root.resizable(width=True, height=True)
7 # 引入升级包,这样才能使用升级的组合控件
8 root.tk.eval('package require Tix')

接下来会设置窗口的属性。

1. Label

1     activebackground, activeforeground, anchor,
2 background, bitmap, borderwidth, cursor,
3 disabledforeground, font, foreground,
4 highlightbackground, highlightcolor,
5 hightlightthickness, image, justify,
6 padx, pady, relief, takefocus, text,
7 textvariable, underline, wraplength,
8 height, state, width

属性很多,说一下常用的属性

1     lable = Label(root, text="label", bg="pink", bd=10, font=("Arial", 12), width=8, height=3)
2 lable.pack(side=LEFT)
第一个 要依附的节点
text 上面显示的字
bg 背景颜色 也可以传rgb16进制的形式
bd 边框宽度
font 字体 第一个是字体样式 第二个是字体大小
width height 宽 高
bitmap 图像
highlightcolor 高亮时字体颜色
highlightbackground 高亮时背景颜色
textvariable 绑定的变量 之后如果变量值发生变动 字也会随之改变
wraplength 换行控制 如果是50就表示宽度到50就换行显示

最后你需要调用pack()来把控件布置上去,你可以指定布局方式,可定义的属性也非常多

  1 # Booleans
2 NO=FALSE=OFF=0
3 YES=TRUE=ON=1
4
5 # -anchor and -sticky
6 N='n'
7 S='s'
8 W='w'
9 E='e'
10 NW='nw'
11 SW='sw'
12 NE='ne'
13 SE='se'
14 NS='ns'
15 EW='ew'
16 NSEW='nsew'
17 CENTER='center'
18
19 # -fill
20 NONE='none'
21 X='x'
22 Y='y'
23 BOTH='both'
24
25 # -side
26 LEFT='left'
27 TOP='top'
28 RIGHT='right'
29 BOTTOM='bottom'
30
31 # -relief
32 RAISED='raised'
33 SUNKEN='sunken'
34 FLAT='flat'
35 RIDGE='ridge'
36 GROOVE='groove'
37 SOLID = 'solid'
38
39 # -orient
40 HORIZONTAL='horizontal'
41 VERTICAL='vertical'
42
43 # -tabs
44 NUMERIC='numeric'
45
46 # -wrap
47 CHAR='char'
48 WORD='word'
49
50 # -align
51 BASELINE='baseline'
52
53 # -bordermode
54 INSIDE='inside'
55 OUTSIDE='outside'
56
57 # Special tags, marks and insert positions
58 SEL='sel'
59 SEL_FIRST='sel.first'
60 SEL_LAST='sel.last'
61 END='end'
62 INSERT='insert'
63 CURRENT='current'
64 ANCHOR='anchor'
65 ALL='all' # e.g. Canvas.delete(ALL)
66
67 # Text widget and button states
68 NORMAL='normal'
69 DISABLED='disabled'
70 ACTIVE='active'
71 # Canvas state
72 HIDDEN='hidden'
73
74 # Menu item types
75 CASCADE='cascade'
76 CHECKBUTTON='checkbutton'
77 COMMAND='command'
78 RADIOBUTTON='radiobutton'
79 SEPARATOR='separator'
80
81 # Selection modes for list boxes
82 SINGLE='single'
83 BROWSE='browse'
84 MULTIPLE='multiple'
85 EXTENDED='extended'
86
87 # Activestyle for list boxes
88 # NONE='none' is also valid
89 DOTBOX='dotbox'
90 UNDERLINE='underline'
91
92 # Various canvas styles
93 PIESLICE='pieslice'
94 CHORD='chord'
95 ARC='arc'
96 FIRST='first'
97 LAST='last'
98 BUTT='butt'
99 PROJECTING='projecting'
100 ROUND='round'
101 BEVEL='bevel'
102 MITER='miter'
103
104 # Arguments to xview/yview
105 MOVETO='moveto'
106 SCROLL='scroll'
107 UNITS='units'
108 PAGES='pages'

写完这些运行程序还是无法出现界面,那是因为还少了一句

root.mainloop()

2. Button

1     """
2 command: 点击调用的方法
3 activeforeground: 点击时按钮上字的颜色
4 activebackground: 点击时按钮的背景颜色
5 """
6 button = Button(root, text='QUIT', command=root.quit, activeforeground="black", activebackground='blue', bg='red',
7 fg='white')
8 button.pack(fill=Y, expand=1)

3. Scale: 滑动条

 1 def resize(ev=None):
2 lable.config(font='Helvetica -%d bold' % scale.get())
3
4 # 滑动条
5 """
6 from_: 滑动条起始值
7 to: 滑动条终点值
8 origent: 样式 两种样式 一横一竖
9 """
10 scale = Scale(root, from_=10, to=40, orient=HORIZONTAL, command=resize)
11 scale.set(12)
12 scale.pack()

和button不同的是command不再是点击事件了而是拖动事件,调用set()方法可以设置当前位置

4. NumberericUpDown: 数字选择框

 1     # 数字选择框
2 """
3 integer: 是否为整数
4 max: 最大值
5 min: 最小值
6 value: 初始值
7 step: 步长
8 """
9 ct = Control(root, label='Number:', integer=True, max=12, min=2, value=2, step=2)
10 ct.label.config(font='Helvetica 14 bold')
11 ct.pack()

5. ComboBox: 下拉选择框

 1     # 下拉选择框
2 """
3 label: 前面要显示的字
4 editable: 控制是否可更改
5 insert(): 给下拉选择框添加选项
6 """
7 cb = ComboBox(root, label='Type:', editable=True)
8 for animal in ('dog', 'cat', 'hamster', 'python'):
9 cb.insert(END, animal)
10 cb.pack()

6. Menu: 菜单

 1     # 菜单选项
2 menubar = Menu(root)
3 root.config(menu=menubar)
4 filemenu = Menu(menubar, tearoff=0)
5 # 给menu添加一个选项
6 menubar.add_cascade(label='文件', menu=filemenu)
7 # 添加子选项
8 filemenu.add_command(label='新建...', command=click())
9 filemenu.add_command(label='打开...', command=click())
10 filemenu.add_command(label='保存...', command=click())
11 filemenu.add_command(label='关闭填写...', command=root.quit)

7. Frame

1     # frame相当于一个局部的窗体,可以用来装载其他控件
2 frame1 = Frame(root)
3 frame1.pack(fill=X)
4 label1 = Label(frame1, text='您的花名:')
5 label1.grid(row=1, column=0)

使用grid能让你更容易把握控件的位置,你可以指定它出现在几行几列,是否跨行跨列,跨几行等等

8. Radiobutton: 单选框

 1     # 单选框
2 frame2 = Frame(root)
3 frame2.pack(fill=X)
4 label2 = Label(frame2, text='您的性别:')
5 label2.grid(row=1, column=0)
6 sex = StringVar()
7 sex_male = Radiobutton(frame2, text='男', fg='blue', variable=sex, value='男')
8 sex_male.grid(row=1, column=2)
9 sex_female = Radiobutton(frame2, text='女', fg='red', variable=sex, value='女')
10 sex_female.grid(row=1, column=4)

这个单选框写出来,刚开始男和女两个单选框都是选中状态,不过,你拿鼠标单击一下,就可以正常的单选状态了。

9. ListBox: 列表

 1     # 列表
2 frame4 = Frame(root)
3 frame4.pack(fill=X)
4 label4 = Label(frame4, text='4、请删除您不会的变成语言:')
5 label4.grid(row=1, column=0)
6 listbox = Listbox(frame4)
7 listbox.grid(row=1, column=1)
8 for item in ["C", "C++", "JAVA", "PYTHON", "R", "SQL", "JS"]:
9 listbox.insert(END, item)
10
11 DELETE = Button(frame4, text='删除', command=lambda listbox=listbox: listbox.delete(ANCHOR))
12 DELETE.grid(row=1, column=2)
13 language = Button(frame4, text='确定')
14 language.grid(row=2, column=1)

这里按钮点击事件的写法使用lambda表达式写的,用法可以自行百度

10. Canvas: 画板

 1 from tkinter import *
2
3
4 class CanvasDemo:
5 def __init__(self):
6 window = Tk()
7 window.title("CanvasDemo")
8
9 self.canvas = Canvas(window, width=200, height=100, bg="White")
10 self.canvas.pack()
11
12 frame = Frame(window)
13 frame.pack()
14
15 btRectangle = Button(frame, text="长方形", command=self.displayRect)
16 btOval = Button(frame, text="椭 圆", command=self.displayOval)
17 btArc = Button(frame, text="圆 弧", command=self.displayArc)
18 btPolygon = Button(frame, text="多边形", command=self.displayPolygon)
19 btLine = Button(frame, text=" 线 ", command=self.displayLine)
20 btString = Button(frame, text="文 字", command=self.displayString)
21 btClear = Button(frame, text="清 空", command=self.clearCanvas)
22
23 btRectangle.grid(row=1, column=1)
24 btOval.grid(row=1, column=2)
25 btArc.grid(row=1, column=3)
26 btPolygon.grid(row=1, column=4)
27 btLine.grid(row=1, column=5)
28 btString.grid(row=1, column=6)
29 btClear.grid(row=1, column=7)
30
31 window.mainloop()
32
33 def displayRect(self):
34 self.canvas.create_rectangle(10, 10, 190, 90, tags="rect")
35
36 def displayOval(self):
37 self.canvas.create_oval(10, 10, 190, 90, tags="oval", fill="red")
38
39 def displayArc(self):
40 self.canvas.create_arc(10, 10, 190, 90, start=-90, extent=90, width=5, fill="red", tags="arc")
41
42 def displayPolygon(self):
43 self.canvas.create_polygon(10, 10, 190, 90, 30, 50, tags="polygon")
44
45 def displayLine(self):
46 self.canvas.create_line(10, 10, 190, 90, fill='red', tags="line")
47 self.canvas.create_line(10, 90, 190, 10, width=9, arrow="last", activefill="blue", tags="line")
48
49 def displayString(self):
50 self.canvas.create_text(60, 40, text="Hi,i am a string", font="Tine 10 bold underline", tags="string")
51
52 def clearCanvas(self):
53 self.canvas.delete("rect", "oval", "arc", "polygon", "line", "string")
54
55
56 CanvasDemo()

11. CheckButton: 多选框

1     # 多选框,onvalue代表被勾选时的值,offvalue代表不被勾选时的值
2 frame8 = Frame(root)
3 frame8.pack()
4 agree = StringVar()
5 agree = Checkbutton(frame8, text='我同意', variable=agree, onvalue='确定', offvalue='不确定',)
6 agree.grid()

12. LabelFrame: 容器框

1     # 容器框
2 frame10 = Frame(root)
3 frame10.pack()
4 group = LabelFrame(frame10, text='特别鸣谢', padx=5, pady=5)
5 group.grid()
6 w = Label(group, text='容器框')
7 w.pack()

这些差不多够用了。

Python基础之用tkinter写界面的更多相关文章

  1. python基础===如何优雅的写代码(转自网络)

    本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片). 示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺 ...

  2. Python基础之用PyQt5写一个tabview

    前面学习了menu的画图,现在学习tabview的画图,关于怎么打开designer.exe部分就不详细介绍了. 第一步:拖动一个Tab Widget控件到窗口去. 将控件拖上去之后就是这个样子,默认 ...

  3. Python基础-包与模块

    Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...

  4. python基础-包和模块

    Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...

  5. python使用tkinter写带界面的工具

    python一般用来写纯脚本的居多,但也可以做有视图的产品出来,例如做网页和客户端工具.做成工具的好处是,让不懂代码的人也能使用,不需要去修改代码里面的参数,如果使用次数频繁,甚至比纯脚本跟节约时间: ...

  6. Python GUI编程(Tkinter) windows界面开发

    Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py 1 #!C:\Python27\python.e ...

  7. 用Python作GIS之四:Tkinter基本界面的搭建

    Python下的主窗口可以定义如下:def start(self):        #self.project = Project("temp")        #self.pro ...

  8. python使用tkinter做界面之颜色

    python使用tkinter做界面之颜色       from tkinter import *colors = '''#FFB6C1 LightPink 浅粉红#FFC0CB Pink 粉红#DC ...

  9. python的re模块一些方法 && Tkinter图形界面设计 && 终止python运行函数 && python读写文件 && python一旦给字符串赋值就不能单独改变某个字符,除非重新给变量赋值

    Tkinter图形界面设计见:https://www.cnblogs.com/pywjh/p/9527828.html#radiobutton 终止python运行函数: 采用sys.exit(0)正 ...

随机推荐

  1. ConcurrentSkipListSet - 秒懂

    疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 面试必备 + 面试必备 [博客园总入口 ] 疯狂创客圈 经典图书 : <Sprin ...

  2. 08-ADMM算法

    08-ADMM算法 目录 一.ADMM 算法动机 二.对偶问题 三.对偶上升法 四.对偶分割 五.乘子法(增广拉格朗日函数) 5.1 步长为 $\rho$ 的好处 六.ADMM算法 6.1 ADMM ...

  3. 【.NET 与树莓派】LED 数码管驱动模块——TM1638

    LED 数码管,你可以将它看做是 N 个发光二级管的组合,一个灯负责显示一个段,七个段组合一位数字,再加一个小数点,这么一来,一位数码管就有八段.一般,按照顺时针的方向给每个段编号. 上图中的 h 就 ...

  4. Golang控制子gorutine退出,并阻塞等待所有子gorutine全部退出

    Golang控制子gorutine退出,并阻塞等待所有子gorutine全部退出 需求 程序有时需要自动重启或者重新初始化一些功能,就需要退出之前的所有子gorutine,并且要等待所有子goruti ...

  5. 快速简单的了解VLAN(VXLAN)和端口链路类型

    目录 前言 一.VLAN是什么? 1.优点 2.为什么推出VXLAN 二.VXLAN又是什么? 1.优点 三.创建VLAN 四.介绍端口链路类型 五.Access 1.特性 六.Trunk 1.特性 ...

  6. Java 读取Word表格中的文本和图片

    本文通过Java程序来展示如何读取Word表格,包括读取表格中的文本和图片.下面是具体实现的步骤和方法. 1. 程序环境准备 代码编译工具:IntelliJ IDEA Jdk版本:1.8.0 测试文档 ...

  7. 乘风破浪,.Net Core遇见MAUI(.NET Multi-platform App UI),进击现代化跨设备应用框架

    什么是MAUI https://github.com/dotnet/maui .NET Multi-platform App UI (MAUI) 的前身是Xamarin.Forms(适用于Androi ...

  8. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  9. CSS3转换(transform)基本用法介绍

    一个炫酷的网页离不开css的transform.transition.animation三个属性,之前一直没有涉及到这块内容,刚好最近要做一个相关东西,趁此机会好好学一学这三个属性. 一.功能 实现元 ...

  10. Linux系统下安装MongoDB

    下载安装包 去MongoDB官网https://www.mongodb.com/try/download/community,下载社区版的安装包: 我的Linux系统是CentOS 7.5版本的,通常 ...