博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tkinter
阅读量:6079 次
发布时间:2019-06-20

本文共 17131 字,大约阅读时间需要 57 分钟。

知识内容:

1.Tkinter介绍

2.Tkinter实战1-用户登录界面

3.Tkinter实战2-选择类组件综合应用

4.Tkinter实战3-简单文本编辑器

5.Tkinter实战4-简单画图程序

6.Tkinter实战5-电子时钟

 

 

 

一、Tkinter介绍

1.tkinter简单介绍

tkinter是python标准库中专门用来做GUI界面的模块,可以使用tkinter开发一些界面

 

2.tkinter简单使用

1 # __author__ = "wyb"2 # date: 2018/4/293 4 import tkinter          # 导入tkinter模块5 6 root = tkinter.Tk()     # 创建主窗口7 8 root.mainloop()         # 进行主循环显示窗口直达关闭窗口

 

 

 

二、Tkinter实战1-用户登录界面

1 # __author__ = "wyb" 2 # date: 2018/5/10 3  4 import tkinter 5 import tkinter.messagebox 6  7  8 # OK按钮响应事件 9 def login():10     name = entryName.get()              # 获取用户名11     pwd = entryPwd.get()                # 获取密码12     if name == 'admin' and pwd == '123456':13         tkinter.messagebox.showinfo(title="python tkinter", message="welcome login")14     else:15         tkinter.messagebox.showerror(title="python tkinter", message="Wrong username or password")16 17 18 # Cancel按钮响应事件19 def cancel():20     varName.set('')21     varPwd.set('')22 23 24 root = tkinter.Tk()25 26 # 申明变量存储用户名和密码27 varName = tkinter.StringVar(value='')28 varPwd = tkinter.StringVar(value='')29 30 # 建立用户名和密码输入提示和输入框:31 labelName = tkinter.Label(root, text='User Name:', justify=tkinter.RIGHT, width=80)32 labelName.place(x=10, y=5, width=80, height=20)33 entryName = tkinter.Entry(root, width=80, textvariable=varName)34 entryName.place(x=100, y=5, width=80, height=20)35 labelPwd = tkinter.Label(root, text='User pwd:', justify=tkinter.RIGHT, width=80)36 labelPwd.place(x=10, y=30, width=80, height=20)37 entryPwd = tkinter.Entry(root, show='*', width=80, textvariable=varPwd)38 entryPwd.place(x=100, y=30, width=80, height=20)39 40 # 建立OK和Cancel按钮并绑定事件:41 buttonOk = tkinter.Button(root, text='Login', command=login)42 buttonOk.place(x=30, y=70, width=50, height=20)43 buttonCancel = tkinter.Button(root, text='Cancel', command=cancel)44 buttonCancel.place(x=90, y=70, width=50, height=20)45 46 root.mainloop()     # 启动消息循环

 

 

 

三、Tkinter实战2-选择类组件综合应用

1 # __author__ = "wyb" 2 # date: 2018/5/10 3  4 import tkinter 5 import tkinter.messagebox 6 import tkinter.ttk 7  8 # 创建窗体并设置标题以及高和宽 9 root = tkinter.Tk()10 root.title('选择类组件综合运用')11 root['height'] = 39012 root['width'] = 35013 14 # 创建姓名标签和输入框15 labelName = tkinter.Label(root, text='Name:', justify=tkinter.RIGHT, width=50)16 labelName.place(x=10, y=5, width=50, height=20)17 varName = tkinter.StringVar(value='')18 entryName = tkinter.Entry(root, width=120, textvariable=varName)19 entryName.place(x=70, y=5, width=120, height=20)20 21 # 创建年纪班级标签及选择框22 studentClasses = {23     '1': ['1', '2', '3', '4'],24     '2': ['1', '2'],25     '3': ['1', '2', '3']26 }27 labelGrade = tkinter.Label(root, text='Grade: ', justify=tkinter.RIGHT, width=50)28 labelGrade.place(x=10, y=40, width=50, height=20)29 comboGrade = tkinter.ttk.Combobox(root, values=tuple(studentClasses.keys()), width=50)30 comboGrade.place(x=70, y=40, width=50, height=20)31 labelClass = tkinter.Label(root, text='Class:', justify=tkinter.RIGHT, width=50)32 labelClass.place(x=130, y=40, width=50, height=20)33 comboClass = tkinter.ttk.Combobox(root, width=50)34 comboClass.place(x=190, y=40, width=50, height=20)35 36 # 创建性别标签及单选框37 labelSex = tkinter.Label(root, text='Sex:', justify=tkinter.RIGHT, width=50)38 labelSex.place(x=10, y=70, width=50, height=20)39 sex = tkinter.IntVar(value=1)               # 绑定变量40 radioMan = tkinter.Radiobutton(root, variable=sex, value=1, text='Man')41 radioMan.place(x=70, y=70, width=50, height=20)42 radioWoman = tkinter.Radiobutton(root, variable=sex, value=0, text='Woman')43 radioWoman.place(x=130, y=70, width=70, height=20)44 45 # 创建班长多选框46 monitor = tkinter.IntVar(value=0)           # 是否是班长 默认为0表示不是班长47 checkMonitor = tkinter.Checkbutton(root, text='Is Monitor?', variable=monitor, onvalue=1, offvalue=0)48 checkMonitor.place(x=20, y=100, width=100, height=20)49 50 51 # 按钮事件处理函数52 # 53 def comboChange(event):54     grade = comboGrade.get()55     if grade:56         comboClass["values"] = studentClasses.get(grade)57 58 # 添加信息59 def addInformation():60     result = 'Name:' + entryName.get()61     result = result + ';Grade:' + comboGrade.get()62     result = result + ';Class:' + comboClass.get()63     result = result + ';Sex:' + ('Man' if sex.get() else 'Woman')64     result = result + ';Monitor:' + ('Yes' if monitor.get() else 'No')65     listboxStudents.insert(0, result)66 67 68 # 创建添加按钮69 buttonAdd = tkinter.Button(root, text='Add', width=40, command=addInformation)70 buttonAdd.place(x=130, y=100, width=40, height=20)71 72 73 # 删除信息74 def deleteSelection():75     selection = listboxStudents.curselection()76     if not selection:77         tkinter.messagebox.showinfo(title='infomation', message='No Selection')78     else:79         listboxStudents.delete(selection)80 81 82 # 创建删除按钮83 buttonDelete = tkinter.Button(root, text='DeleteSelection', width=100, command=deleteSelection)84 buttonDelete.place(x=180, y=100, width=100, height=20)85 86 # 创建多行文本框87 listboxStudents = tkinter.Listbox(root, width=30)88 listboxStudents.place(x=10, y=130, width=300, height=200)89 90 root.mainloop()

 

 

 

四、Tkinter实战3-简单文本编辑器

 

1 # __author__ = "wyb"  2 # date: 2018/5/10  3 import tkinter  4 import tkinter.filedialog  5 import tkinter.colorchooser  6 import tkinter.messagebox  7 import tkinter.scrolledtext  8 import tkinter.simpledialog  9  10 # 创建应用程序窗口 11 app = tkinter.Tk() 12 app.title('简单文本编辑器') 13 app['width'] = 800 14 app['height'] = 600 15  16 textChanged = tkinter.IntVar(value=0) 17 # 当前文件名 18 filename = '' 19  20 # 创建菜单 21 menu = tkinter.Menu(app) 22 # File菜单 23 submenu = tkinter.Menu(menu, tearoff=0) 24  25  26 # 打开 27 def Open(): 28     global filename 29     # 如果内容以及改变,先保存 30     if textChanged.get(): 31         yesno = tkinter.messagebox.askyesno(title='保存', message='是否保存') 32         if yesno == tkinter.YES: 33             Save() 34     filename = tkinter.filedialog.askopenfilename(title='打开文件', filetype=[('Text files', '*.txt')]) 35  36     if filename: 37         # 清空内容,0.0是lineNumber.Column的表示方法 38         txtContent.delete(0.0, tkinter.END) 39         fp = open(filename, 'r') 40         txtContent.insert(tkinter.INSERT, ''.join(fp.readlines())) 41         fp.close() 42         # 标记为尚未修改 43         textChanged.set(0) 44  45  46 # 创建File菜单选项Open并绑定菜单事件处理函数 47 submenu.add_command(label='Open', command=Open) 48  49  50 # 保存 51 def Save(): 52     global filename 53     # 如果是第一次保存新建则打开另存为窗口 54     if not filename: 55         SaveAs() 56     # 如果内容发送变化就保存 57     elif textChanged.get(): 58         fp = open(filename, 'w') 59         fp.write(txtContent.get(0.0, tkinter.END)) 60         fp.close() 61         textChanged.set(0) 62  63  64 # 创建File菜单选项Save并绑定菜单事件处理函数 65 submenu.add_command(label='Save', command=Save) 66  67  68 # 另存 69 def SaveAs(): 70     global filename 71     # 打开另存为窗口 72     newfilename = tkinter.filedialog.asksaveasfilename(title='Save As', initialdir=r'c:\\', initialfile='new.txt') 73     # 如果指定了文件名则保存文件 74     if newfilename: 75         fp = open(newfilename, 'w') 76         fp.write(txtContent.get(0.0, tkinter.END)) 77         fp.close() 78         textChanged.set(0) 79  80  81 # 创建File菜单选项Save As并绑定菜单事件处理函数 82 submenu.add_command(label='Save As', command=SaveAs) 83 # 添加分割线 84 submenu.add_separator() 85  86  87 # 关闭 88 def Close(): 89     global filename 90     Save() 91     txtContent.delete(0.0, tkinter.END) 92     # 置空文件名 93     filename = '' 94  95  96 # 创建File菜单选项Close并绑定菜单事件处理函数 97 submenu.add_command(label='Close', command=Close) 98 # 将File菜单关联到主菜单上 99 menu.add_cascade(label='File', menu=submenu)100 101 # Edit菜单102 submenu = tkinter.Menu(menu, tearoff=0)103 104 105 # 撤销106 def Undo():107     # 启用undo标志108     txtContent['undo'] = True109     try:110         txtContent.edit_undo()111     except Exception as e:112         pass113 114 115 # 创建Edit菜单选项Undo并绑定菜单事件处理函数116 submenu.add_command(label='Undo', command=Undo)117 118 119 #120 def Redo():121     txtContent['undo'] = True122     try:123         txtContent.edit_redo()124     except Exception as e:125         pass126 127 128 # 创建Edit菜单选项Redo并绑定菜单事件处理函数129 submenu.add_command(label='Redo', command=Redo)130 # 添加分割线131 submenu.add_separator()132 133 134 # 赋值135 def Copy():136     txtContent.clipboard_clear()137     txtContent.clipboard_append(txtContent.selection_get())138 139 140 # 创建Edit菜单选项Copy并绑定菜单事件处理函数141 submenu.add_command(label='Copy', command=Copy)142 143 144 # 剪切145 def Cut():146     Copy()147     # 删除所选内容148     txtContent.delete(tkinter.SEL_FIRST, tkinter.SEL_LAST)149 150 151 # 创建Edit菜单选项Cut并绑定菜单事件处理函数152 submenu.add_command(label='Cut', command=Cut)153 154 155 # 粘贴156 def Paste():157     # 如果没有选择内容则直接粘贴到鼠标位置158     # 如果有所选内容,则先删除再粘贴159     try:160         txtContent.insert(tkinter.SEL_FIRST, txtContent.clipboard_get())161         txtContent.delete(tkinter.SEL_FIRST, tkinter.SEL_LAST)162         # 如果粘贴成功就结束本函数以免异常处理结构执行完成之后再次粘贴163         return164     except Exception as e:165         pass166 167 168 # 创建Edit菜单选项Paste并绑定菜单事件处理函数169 submenu.add_command(label='Paste', command=Paste)170 # 添加分割线171 submenu.add_separator()172 173 174 # 搜索175 def Search():176     # 获取要查找的内容177     textToSearch = tkinter.simpledialog.askstring(title='Search', prompt='What to search?')178     start = txtContent.search(textToSearch, 0.0, tkinter.END)179     if start:180         tkinter.messagebox.showinfo(title='Found', message='OK')181 182 183 # 创建Edit菜单选项Search并绑定菜单事件处理函数184 submenu.add_command(label='Search', command=Search)185 # 将Edit菜单关联到主菜单上186 menu.add_cascade(label='Edit', menu=submenu)187 188 # Help菜单189 submenu = tkinter.Menu(menu, tearoff=0)190 191 192 def About():193     tkinter.messagebox.showinfo(title='About the author', message='Author: wyb')194 195 196 # 创建Help菜单选项About并绑定菜单事件处理函数197 submenu.add_command(label='About', command=About)198 # 将Help菜单关联到主菜单上199 menu.add_cascade(label='Help', menu=submenu)200 # 将创建的菜单关联到应用程序窗口201 app.config(menu=menu)202 203 # 创建文本编辑器组件并自动适应窗口大小204 txtContent = tkinter.scrolledtext.ScrolledText(app, wrap=tkinter.WORD)205 txtContent.pack(fill=tkinter.BOTH, expand=tkinter.YES)206 207 208 def KeyPress(event):209     textChanged.set(1)210 211 212 txtContent.bind('
', KeyPress)213 214 # 开始主循环215 app.mainloop()

 

 

 

五、Tkinter实战4-简单画图程序

1 # __author__ = "wyb"  2 # date: 2018/5/11  3   4 import tkinter  5 import tkinter.colorchooser  6 import tkinter.simpledialog  7 import tkinter.filedialog  8 from PIL import Image  9  10 app = tkinter.Tk() 11  12 app.title('Paint') 13 app['width'] = 800 14 app['height'] = 600 15  16 # 控制是否允许画图的变量,1:允许,0:不允许 17 yesno = tkinter.IntVar(value=0) 18 # 控制画图类型的变量, 1:曲线, 2:直线,3:矩形, 4:文本,5:橡皮 19 what = tkinter.IntVar(value=1) 20 # 记录鼠标位置的变量 21 X = tkinter.IntVar(value=0) 22 Y = tkinter.IntVar(value=0) 23 # 前景色 24 foreColor = '#000000' 25 backColor = '#FFFFFF' 26  27 # 创建画布 28 image = tkinter.PhotoImage() 29 canvas = tkinter.Canvas(app, bg='white', width=800, height=600) 30 canvas.create_image(800, 600, image=image) 31  32  33 # 单击 允许画图 34 def onLeftButtonDown(event): 35     yesno.set(1) 36     X.set(event.x) 37     Y.set(event.y) 38     if what.get() == 4: 39         # 输出文本 40         canvas.create_text(event.x, event.y, text=text) 41  42  43 canvas.bind('
', onLeftButtonDown) 44 45 # 记录最后绘制图形的id 46 lastDraw = 0 47 48 49 # 按住鼠标左键移动,画图 50 def onLeftButtonMove(event): 51 if yesno.get() == 0: 52 return 53 if what.get() == 1: 54 # 使用当前选择的前景色绘制曲线 55 canvas.create_line(X.get(), Y.get(), event.x, event.y, fill=foreColor) 56 X.set(event.x) 57 Y.set(event.y) 58 elif what.get() == 2: 59 # 绘制直线,先删除刚刚画过的直线再画一条新的直线 60 global lastDraw 61 try: 62 canvas.delete(lastDraw) 63 except Exception as e: 64 pass 65 lastDraw = canvas.create_line(X.get(), Y.get(), event.x, event.y, fill=foreColor) 66 elif what.get() == 3: 67 # 绘制矩形,先删除刚刚画过的矩形,再画一个新的矩形 68 # global lastDraw 69 try: 70 canvas.delete(lastDraw) 71 except Exception as e: 72 pass 73 lastDraw = canvas.create_rectangle(X.get(), Y.get(), event.x, event.y, fill=backColor, outline=foreColor) 74 elif what.get() == 5: 75 # 橡皮 使用背景色填充10*10的矩形区域 76 canvas.create_rectangle(event.x-5, event.y-5, event.x+5, event.y+5, outline=backColor, fill=backColor) 77 78 79 canvas.bind('
', onLeftButtonMove) 80 81 82 # 鼠标左键抬起,不允许画图 83 def onLeftButtonUp(event): 84 if what.get() == 2: 85 # 绘制直线 86 canvas.create_line(X.get(), Y.get(), event.x, event.y, fill=foreColor) 87 elif what.get() == 3: 88 # 绘制矩形 89 canvas.create_rectangle(X.get(), Y.get(), event.x, event.y, fill=backColor, outline=foreColor) 90 yesno.set(0) 91 global lastDraw 92 lastDraw = 0 93 94 95 canvas.bind('
', onLeftButtonUp) 96 97 98 # 创建菜单 99 menu = tkinter.Menu(app, tearoff=0)100 101 102 # 打开图像文件103 def Open():104 filename = tkinter.filedialog.askopenfilename(title='Open Image', filetypes=[('image', '*.jpg', '*.png', '*.gif')])105 if filename:106 global image107 image = tkinter.PhotoImage(file=filename)108 canvas.create_image(80, 80, image=image)109 110 111 # 向菜单中添加Open并绑定事件处理函数112 menu.add_command(lable='Open', command=Open)113 114 115 # 清除绘制的图形116 def Clear():117 for item in canvas.find_all():118 canvas.delete(item)119 120 121 # 向菜单中添加Clear并绑定事件处理函数122 menu.add_command(lable='Clear', command=Clear)123 menu.add_separator() # 添加分割线124 125 126 # 创建子菜单用来选择绘图类型127 menuType = tkinter.Menu(menu, tearoff=0)128 129 130 def drawCurve():131 what.set(1)132 133 134 def drawLine():135 what.set(2)136 137 138 def drawRectangle():139 what.set(3)140 141 142 def drawText():143 global text144 text = tkinter.simpledialog.askstring(title='Input what you want to draw', prompt='')145 what.set(4)146 147 148 # 向子菜单中添加Curve并绑定事件处理函数149 menuType.add_command(lable='Curve', command=drawCurve)150 # 向子菜单中添加Curve并绑定事件处理函数151 menuType.add_command(lable='Line', command=drawLine)152 # 向子菜单中添加Rectangle并绑定事件处理函数153 menuType.add_command(lable='Rectangle', command=drawRectangle)154 # 向子菜单中添加Text并绑定事件处理函数155 menuType.add_command(lable='Text', command=drawText)156 menuType.add_separator() # 添加分割线157 158 159 # 选择前景色160 def chooseForeColor():161 global foreColor162 foreColor = tkinter.colorchooser.askcolor()163 164 165 # 选择背景色166 def chooseBackColor():167 global backColor168 backColor = tkinter.colorchooser.askcolor()169 170 171 menuType.add_command(lable='Choose Foreground Color', command=chooseForeColor)172 menuType.add_command(lable='Choose Backgound Color', command=chooseBackColor)173 174 175 # 橡皮176 def onErase():177 what.set(5)178 179 180 menuType.add_command(label='Erase', command=onErase)181 menu.add_cascade(label='Type', menu=menuType)182 183 184 # 鼠标右键抬起,在鼠标位置弹出菜单185 def onRightButtonUp(event):186 menu.post(event.x_root, event.y_root)187 188 189 canvas.bind('
', onRightButtonUp)190 canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES)191 192 app.mainloop()

 

 

 

六、Tkinter实战5-电子时钟

1 import tkinter 2 import threading 3 import datetime 4 import time 5  6 app = tkinter.Tk() 7 app.overrideredirect(True)          # 不显示标题栏 8 app.attributes('-alpha', 0.9)       # 半透明 9 app.attributes('-topmost', 1)       # 总是在顶端10 app.geometry('110x25+500+200')      # 初始大小与位置11 labelDateTime = tkinter.Label(app)12 labelDateTime.pack(fill=tkinter.BOTH, expand=tkinter.YES)13 labelDateTime.configure(bg='gray')14 X = tkinter.IntVar(value=0)  # 记录鼠标左键按下的位置15 Y = tkinter.IntVar(value=0)16 canMove = tkinter.IntVar(value=0)  # 窗口是否可拖动17 still = tkinter.IntVar(value=1)  # 是否仍在运行18 19 20 def onLeftButtonDown(event):21     app.attributes('-alpha', 0.4)  # 开始拖动时增加透明度22     X.set(event.x)  # 鼠标左键按下,记录当前位置23     Y.set(event.y)24     canMove.set(1)  # 并标记窗口可拖动25     labelDateTime.bind('
', onLeftButtonDown)26 27 28 def onLeftButtonUp(event):29 app.attributes('-alpha', 0.9) # 停止拖动时恢复透明度30 31 32 canMove.set(0) # 鼠标左键抬起,标记窗口不可拖动33 labelDateTime.bind('
', onLeftButtonUp)34 35 36 def onLeftButtonMove(event):37 if canMove.get()==0:38 return39 newX = app.winfo_x() + (event.x - X.get())40 newY = app.winfo_y() + (event.y - Y.get())41 g = '110x25+' + str(newX) + '+' + str(newY)42 app.geometry(g) # 修改窗口的位置43 labelDateTime.bind('
', onLeftButtonMove)44 45 46 def onRightButtonDown(event):47 still.set(0)48 t.join(0.2)49 app.destroy() # 关闭窗口50 labelDateTime.bind('
', onRightButtonDown)51 52 53 def nowDateTime():54 while still.get() == 1:55 now = datetime.datetime.now()56 s = str(now.year) + '-' + str(now.month) + '-' + str(now.day) + ' '57 s = s + str(now.hour) + ':' + str(now.minute) + ':' + str(now.second)58 labelDateTime['text'] = s # 显示当前时间59 time.sleep(0.2)60 61 62 t = threading.Thread(target=nowDateTime)63 t.daemon = True64 t.start()65 app.mainloop()

 

转载于:https://www.cnblogs.com/wyb666/p/9017236.html

你可能感兴趣的文章
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>
鼠标增强软件StrokeIt使用方法
查看>>
本地连接linux虚拟机的方法
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
NLog文章系列——如何优化日志性能
查看>>
Hadoop安装测试简单记录
查看>>
CentOS6.4关闭触控板
查看>>
ThreadPoolExecutor线程池运行机制分析-线程复用原理
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>