参考链接: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. 【NX二次开发】Block UI 线型

    属性说明 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  2. 【NX二次开发】Block UI 截面构建器

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  3. NX二次开发-获取面的外围边和孔槽边

    函数: UF_MODL_ask_face_loops()  获取面的所有封闭边组合(多组edge) UF_MODL_ask_loop_list_count() 获取loop的数量(面上孔.槽的数量+1 ...

  4. 09:CBV与settings

    CBV源码 # 切入点 url(r'^login/', views.Mylogin.as_view()) '''类名点名字还加括号 名字要么是绑定给类的方法 要么是无参函数''' ​ 1.as_vie ...

  5. Django基础之cookie与session

    cookie与session 由来及简介 HTTP协议四大特性 1.基于请求响应 2.基于TCP.IP作用于应用层之上 3.无连接 4.无状态 基于HTTP协议的通信无法记录客户端状态 但是现在很多软 ...

  6. 精尽Spring Boot源码分析 - 序言

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  7. Qt之先用了再说系列-串口通讯(单串口单线程)

    QT 串口通讯(单串口单线程) 串口通讯在我们写程序的时候或多或少会用到,借此在这记录一下QT是如何使用串口来通讯的.本次先侃侃在单线程下使用1个串口来通讯过程.好了,废话不多说,直接看步骤,我们的宗 ...

  8. 7. Qt中与垃圾回收机制相关的替代方法(未完

    容器支持引用计数和写时复制 父对象和子对象 QPointer.QSharedPointer.QWeakReference 对象子类化 栈对象

  9. 4、linux32位和64位操作系统的区别

  10. 基于Redis的分布式锁设计

    前言 基于Redis的分布式锁实现,原理很简单嘛:检测一下Key是否存在,不存在则Set Key,加锁成功,存在则加锁失败.对吗?这么简单吗? 如果你真这么想,那么你真的需要好好听我讲一下了.接下来, ...