当前位置:   article > 正文

Python绘图—tkinter库基础语法介绍_python tkinter详解

python tkinter详解

目录

一、tkinter库介绍

二、tkinter常用控件介绍

三、tkinter布局方式

1.  tkinter布局方式表 

2   .grid()方法详解

四、canvas画布

1.  canvas属性方法表

2.  代码实例(小房子) 

五、tkinter应用程序开发基本流程 

六、tkinter代码实例演示


一、tkinter库介绍

        Python标准库tkinter是对Tcl/Tk的进一步封装,是一套完整的GUI开发模块的组合或套件,这些模块共同提供了强大的跨平台GUI编程的功能,所有的源码文件位于Python安装目录中lib\tkinter文件夹。

      tkinter与turtle类似,无需额外安装,使用起来非常方便。tkinter提供了很多控件和消息事件,可以很快入手,非常适合开发具有界面的轻量级应用程序。使用tkinter之前,需要导入tkinter模块:

import tkinter
'
运行

二、tkinter常用控件介绍

      tkinter中的控件就是一些已经封装好的界面单元,可以直接使用,再复杂的应用程序都是由一个个控件单元组成。只要掌握了单个控件的使用方法,应用程序就可以如搭积木般创建出来。

(有感而发:想到老子的一句话:“道生一,一生二,二生三,三生万物。”)

控件名称

说明

Button

按钮,在界面中显示一个按钮

Canvas

画布,用于绘制直线、椭圆、多边形等各种图形

Checkbutton

复选框形式的按钮,用于在界面中提供多项选择功能,选择间没有互斥关系

Radiobutton

单选按钮,同一组中的单选钮任何时刻只能有一个处于选中状态

Entry

单行文本框

Text多行文本框

Frame

框架,可作为其他组件的容器,常用来对组件进行分组

Label

标签,常用来显示单行文本

Listbox

列表

Menu

菜单,用于显示菜单栏,包括下拉菜单和弹出菜单

Message

消息控件,可以根据自身大小将文本换行

Scale滑动控件,显示一个数值刻度,为输出限定范围和数字之间,可以通过鼠标拖动改变数值

Scrollbar

滚动条控件,当内容超出可视化区域时使用

Toplevel

容器控件,常用来创建新的窗口

Spinbox输入控件,与Entry类似,但是可以指定输入数值范围
PanedWindow窗口布局管理插件,可以包含一个或多个子控件
LabelFrame简单的容器控件,在复杂的窗口布局中使用
tkMessageBox弹出消息框控件

三、tkinter布局方式

1.  tkinter布局方式表 

布局参数描述
packafter将组件放置于其他组件后面
before将组件放置于其他组件前面
anchor组件的对齐方式:N(下/南)对齐,S(上/北)对齐,w(左/西)对齐,E(右/东)对齐
side组件相对于主窗口的位置:TOP(上方),BOTTOM(下方),LEFT(左侧),RIGHT(右侧)
fill填充方式,X:水平填充,Y:垂直填充
gridrow指定组件所在行
column指定组件所在列
rowspan跨越(合并)的行数
columnspan跨越(合并)的列数
sticky这个参数用来确定:在插件正常尺寸下,如何分配 单元 中多余的空间
placeanchor组件的对齐方式:N(下/南)对齐,S(上/北)对齐,w(左/西)对齐,E(右/东)对齐
x组件左上角的x坐标
y组件左上角的y坐标
relx组件相对于窗口的x坐标,取值为0~1
rely组件相对于窗口的y坐标,取值为0~1
width组件宽度
height组件高度
relwidth组件相对于窗口的宽度,取值为0~1
relheight组件相对于窗口的高度,取值为0~1

2   .grid()方法详解

以下语句可以在你的应用界面显示 w 插件:

w.grid(option=value , ...)

      这个方法使用 grid 结构管理器,登记了 w 插件。如果没有这条语句,将不会在屏幕中显示这个插件,而只存在于代码中。语句中的 option 项可查看下表,.grid() 结构管理器的参数。

.grid()结构管理器的参数
option解释
column插件布放的列数值,从0开始。默认值为0
columnspan正常情况下,一个插件只占一个单元 。但是,你可以通过设置 columnspan 来合并一行中的多个邻近 单元 ,并用此 单元 放置本插件。比如, w.grid(row=0, column=2, columnspan=3) ,这会把插件 w 布置在 将第0行的2,3,4列合并后的 单元 中。
in_用 in_=w2 可以将 w 登记为 w2 的child插件。 w2 必须是 w 创建时指定parent插件的child插件。
ipadxx方向的内部填充。在插件内部,左右方向各填充指定长度的空间。
ipadyy方向的内部填充。在插件内部,上下方向各填充指定长度的空间。
padxx方向的外部填充。在插件外部,左右方向各填充指定长度的空间。
padyy方向的内部填充。在插件内部,上下方向各填充指定长度的空间。
row插件布放的行数值,从0开始。默认值 为 未布放行 的下一个数值。
rowspan正常情况下,一个插件只占一个单元 。但是,你可以通过设置 rowspan 来合并一列中的多个邻近 单元 ,并用此 单元 放置本插件。比如, w.grid(row=3, column=2, rowspan=4, columnspan=3) ,这会把插件 w 布置在 合并了20个 单元 的区域中,也就是3-6行和2-6列。
sticky这个参数用来确定:在插件正常尺寸下,如何分配 单元 中多余的空间。具体如下。
  • 如果没有声明sticky属性,默认将插件居中于 单元 中。
  • 通过设置 sticky=tk.NE (靠右上方),sticky=tk.SE(靠右下方),sticky=tk.SW(靠左下方),sticky=tk.NW(靠左上方),可以将插件布置在 单元 的某个角落。
  • 通过设置 sticky=tk.N(靠上方),sticky=tk.E(靠右方),sticky=tk.S(靠下方),sticky=tk.W(靠左方),可以将插件布置在 单元 的某个方向上。
  • 通过设置sticky=tk.N+tk.S,在垂直方向上延伸插件,并保持水平居中。
  • 通过设置sticky=tk.E+tk.W,在水平方向上延伸插件,并保持垂直居中。
  • 通过设置sticky=tk.N+tk.E+tk.W,在水平和垂直方向上延伸插件,填满 单元 。
  • 也可以使用其他的组合。比如,sticky=tk.N+tk.S+tk.W,在垂直方向上延伸插件,并靠左布放。

注:.grid()方法翻译自新墨西哥理工大学计算机中心

四、canvas画布

1.  canvas属性方法表

属性和方法说明
控制参数background,简称bg背景色
foreground,简称fg前景色
borderwidth边框宽度
width宽度
height高度
bitmap位图
image图片
方法create_arc绘制圆弧
create_bitmap绘制位图,支持xbmn格式
 create_image绘制图片,支持gif格式
create_line绘制直线
create_oval绘制椭圆
create_ploygon绘制多边形
create_rectangle 绘制矩形
create_text绘制文本框
create_window绘制窗口
delete删除绘制的图形
itemconfig修改图形属性
move移动图形,如move(1,4,5),1为图像对象标识,4为水平移动像素,5为垂直移动像素
coords重新设置图形位置
 update刷新画布

2.  代码实例(小房子) 

代码实例

  1. # coding=utf-8
  2. import tkinter as tk # 导入tkinter模块
  3. root = tk.Tk() # 创建一个顶级窗口
  4. root.title('小房子1') # 设置标题
  5. canvas = tk.Canvas(root, bg='white', width=700, height=700) # 在root窗口上创建画布canvas,白色背景,宽和高均为700像素
  6. canvas.pack(anchor='center') # canvas在root上居中显示
  7. points = [(50, 250), (350, 50), (650, 250)] # 三角形顶点坐标位置
  8. canvas.create_polygon(points, fill='gray', outline='black', width=10) # 白色填充,红色线条,线宽为10
  9. canvas.create_rectangle((200, 250, 500, 550),
  10. fill='white', outline='black', width=10) # 绘制矩形,白色填充,绿色线条,线宽为10
  11. canvas.create_oval((250, 300, 450, 500),
  12. fill='yellow', outline='black', width=10) # 绘制圆形,黄色填充,黄色线条,线宽为10
  13. root.mainloop() # 进入消息循环

运行结果

 

五、tkinter应用程序开发基本流程 

  1. 编写通用代码,例如数据库操作、程序中需要多次调用的函数,这需要在编写代码之间对软件的功能进行分析和整理,最终提炼出通用部分的代码封装成类或函数。
  2. 搭建界面,放置菜单、标签、按钮、输入框、选择框等组件,设置组件属性。
  3. 编写组件的事件处理代码
  1. # 根据需要导入需要的模块
  2. import tkinter
  3. import tkinter.ttk
  4. import tkinter.messagebox
  5. import tkinter.simpledialog
  6. # 这里编写通用代码,或单独放置到另外的模块中再导入
  7. # 创建tkinter应用程序主窗口
  8. root = tkinter.Tk()
  9. # 此处编写设置窗口属性的代码
  10. # 此处编写创建窗口上各种组件的代码
  11. # 以及按钮、组合框等交互式组件的事件代码
  12. # 启动消息主循环,启动应用程序
  13. root.mainloop()

六、tkinter代码实例演示

个人介绍页面代码展示

  1. #coding = utf-8
  2. from tkinter import *
  3. from tkinter.ttk import *
  4. from tkinter import messagebox
  5. '''全局变量的定义'''
  6. # 顶层窗口
  7. root = None
  8. # 姓名和密码Entry控件
  9. entry_name, entry_pwd = None, None
  10. # 性别、学历控件绑定的值
  11. sex, education = None, None
  12. # 音乐、舞蹈控件绑定的值
  13. music, dance = None, None
  14. # 个人介绍Text控件绑定的值
  15. text_remark = None
  16. def radiobutton_clicked():
  17. '''
  18. Radiobutton单选按钮控件点击触发事件
  19. :return:
  20. '''
  21. global sex
  22. print("sex : " + str(sex.get()))
  23. def checkbutton_clicked():
  24. '''
  25. Checkbutton多选按钮点击触发事件
  26. :return:
  27. '''
  28. global music, dance
  29. print("music : " + str(music.get()))
  30. print("dance : " + str(dance.get()))
  31. def printInfo():
  32. '''
  33. 获取和打印页面信息
  34. :return:
  35. '''
  36. print("submit is called......")
  37. global entry_name, entry_pwd, text_remark, \
  38. sex, music, dance, education
  39. print('name : %s' % (entry_name.get()))
  40. print('pwd : %s' % (entry_pwd.get()))
  41. print('remark : %s' % (text_remark.get('0.0', 'end')))
  42. print('sex : %s' % (sex.get()))
  43. print('pwd : %s' % (entry_pwd.get()))
  44. print("education : %s" % (education.get()))
  45. def close():
  46. '''
  47. 关闭窗口
  48. :return:
  49. '''
  50. print("close is called......")
  51. global root
  52. root.quit()
  53. def showDlg():
  54. '''
  55. 显示对话框
  56. :return:
  57. '''
  58. global entry_name
  59. messagebox.showinfo(title='对话框事例', message=entry_name.get())
  60. def createUI():
  61. '''
  62. 创建窗口和控件
  63. :return:
  64. '''
  65. global root, entry_name, entry_pwd, sex, \
  66. education, music, dance, text_remark
  67. root = Tk()
  68. root.title("Register")
  69. sex = IntVar()
  70. music = IntVar()
  71. dance = IntVar()
  72. sex.set(1) # 1:男性, 2:女性
  73. music.set(1) # 1:选中, 0:不选中
  74. dance.set(0) # 1:选中, 0:不选中
  75. # frame_head,其父窗口为root
  76. frame_head = Frame(root)
  77. frame_head.pack(side=TOP, fill=BOTH, expand=YES)
  78. # frame_account,其父窗口为frame_head
  79. frame_account = Frame(frame_head)
  80. frame_account.grid(row=0, column=0)
  81. label_name = Label(frame_account, text='姓名:', width=10)
  82. label_name.grid(row=0, column=0, padx=10, pady=5)
  83. entry_name = Entry(frame_account, foreground='blue', width=28)
  84. entry_name.insert(0, '简时刻')
  85. #entry_name.delete(3, END)
  86. entry_name.grid(row=0, column=1, padx=10, pady=5)
  87. label_pwd = Label(frame_account, text='密码:', width=10)
  88. label_pwd.grid(row=1, column=0, padx=10, pady=5)
  89. entry_pwd = Entry(frame_account, show="*",foreground='red', width=28)
  90. entry_pwd.insert(0, '123456')
  91. entry_pwd.grid(row=1, column=1, padx=10, pady=5)
  92. label_sex = Label(frame_account, text='性别:', width=10)
  93. label_sex.grid(row=2, column=0, padx=10, pady=5)
  94. frame_sex = Frame(frame_account)
  95. frame_sex.grid(row=2, column=1, padx=10, pady=5)
  96. # 1:选中, 0:不选中
  97. radio_btn_m = Radiobutton(frame_sex, variable=sex, text='男', value=1,
  98. command=radiobutton_clicked)
  99. radio_btn_m.grid(row=0, column=0, padx=20, pady=5)
  100. radio_btn_f = Radiobutton(frame_sex, variable=sex, text='女', value=2,
  101. command=radiobutton_clicked)
  102. radio_btn_f.grid(row=0, column=1, padx=20, pady=5)
  103. # frame_image,其父窗口为frame_head
  104. frame_image= Frame(frame_head)
  105. frame_image.grid(row=0, column=1)
  106. bm = PhotoImage(file="男孩.png")
  107. label_image = Label(frame_image,image=bm)
  108. label_image.bm = bm
  109. label_image.grid(row=0,column=1, padx=10, pady=5)
  110. # frame_info,其父窗口为root
  111. frame_info = Frame(root)
  112. frame_info.pack(side=TOP, fill=BOTH, expand=YES)
  113. label_education = Label(frame_info, text='学历:', width=10)
  114. label_education.grid(row=1, column=0, padx=10, pady=5)
  115. education = StringVar()
  116. comb_education = Combobox(frame_info,
  117. textvariable=education, width=40)
  118. comb_education.grid(row=1, column=1, padx=10, pady=5)
  119. comb_education['value'] = ['专科','本科','硕士','博士']
  120. comb_education.current(2)
  121. label_hobby = Label(frame_info, text='爱好:', width=10)
  122. label_hobby.grid(row=2, column=0, padx=10, pady=5)
  123. frame_hobby = Frame(frame_info, width=40)
  124. frame_hobby.grid(row=2, column=1, padx=10, pady=5)
  125. check_btn_music = Checkbutton(frame_hobby, text='编程',
  126. variable=music,
  127. command=checkbutton_clicked)
  128. check_btn_music.grid(row=0, column=0, padx=20, pady=5)
  129. check_btn_dance = Checkbutton(frame_hobby, text='阅读',
  130. variable=dance,
  131. command=checkbutton_clicked)
  132. check_btn_dance.grid(row=0, column=1, padx=20, pady=5)
  133. check_btn_music = Checkbutton(frame_hobby, text='游戏',
  134. variable=music,
  135. command=checkbutton_clicked)
  136. check_btn_music.grid(row=0, column=2, padx=20, pady=5)
  137. # frame_remark,其父窗口是root
  138. frame_remark = Frame(root)
  139. frame_remark.pack(side=TOP, fill=BOTH, expand=YES)
  140. text_remark = Text(frame_remark, width=55,
  141. height=5, foreground='green')
  142. text_remark.insert(1.0, '1. 简时刻就读于广州大学教育技术学专业\n')
  143. text_remark.insert(2.0, '2. 大二参加互联网比赛以及挑战杯\n')
  144. text_remark.insert(3.0, '3. 大三考取计算机二级office、python和教师资格证书\n')
  145. text_remark.insert(4.0, '4. 目前正在学习Python,水平菜鸟入门级')
  146. text_remark.grid(row=0, column=0, padx=10, pady=5)
  147. # frame_btn,其父窗口为root
  148. frame_btn = Frame(root, width=40)
  149. frame_btn.pack(side=BOTTOM, fill=BOTH, expand=YES)
  150. btn_submit = Button(frame_btn, text='获取信息', command=printInfo)
  151. btn_submit.grid(row=0, column=0, padx=20, pady=10)
  152. btn_quit = Button(frame_btn, text='关闭窗口', command=close)
  153. btn_quit.grid(row=0, column=1, padx=20, pady=10)
  154. btn_dlg = Button(frame_btn, text='对话框', command=showDlg)
  155. btn_dlg.grid(row=0,column=2, padx=20, pady=10)
  156. root.mainloop()
  157. if __name__ == '__main__':
  158. createUI()

运行结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/847332
推荐阅读
相关标签
  

闽ICP备14008679号