阅读目录:

  • 事件绑定

  • Toplevel组件
  • 标准对话框

事件绑定:

  说明:对于每个组件来说,可以通过bind()方法将函数或方法绑定到具体的事件上。

事件序列:

  说明:用户需要使用bind()方法将具体的事件序列与自定义的方法绑定,时间序列是以字符串的形式表示的。

  语法描述:

    <modifier - type - dateil>

    事件序列必须包含在尖括号(<...>)中

    type部分的内容是最重要的,它通常用来描述普通的数据类型,例如鼠标单击或键盘单击(<Button-1>,表示用户单击鼠标左键)

    modifier部分是可选的,它通常是用于描述组合键,例如Ctrl+c,(<Key-H>,表示用户按下H)

    dateil部分是可选的,它通常是描述具体的键,(<Control-Shift-Key-H>,表示用户同时按下Ctrl+Shift+H)

  type(常用的):

    Button:当用户点击鼠标按键的时候触发该事件,<Button-1>左键,<Button-2>中键,<Button-3>右键,<Button-4>滚轮上(liunx),<Button-5>滚轮下(liunx)  

    ButtonRelease:当用户释放鼠标按键的时候触发的事件

    KeyPress:当用户按下键盘的时候触发该事件,简写key

  modifier(常用的):

    Alt:当用户按下Alt按键的的时候

    Any:表示任何类型的按键被按下的时候,例如<Any-KeyPress>,表示当用户按下任何键的时候

    Control:表示按下Ctrl键的时候

    Double:当后续两个事件被连续触发的时候,例如<Double-Button-1>,表示双击鼠标左键的时候

    Lock:当打开大写字母的时候

    Shift:当按下Shift的时候

    Triple:当后续三个事件被触发的时候

Event对象:

  说明:当Tkinter去回调预定定义的函数的时候,将会带着Evnet对象去调用,常用的有:

  x,y 当前鼠标位置坐标(相对于窗口左上角)

  x_root,y_root 当前鼠标位置坐标(相对于屏幕左上角)

  char 按键对应的字符

  keysym 按键名

  keycode 按键码

获取鼠标的位置:

from tkinter import *
root = Tk()
frame = Frame(root,width=200,height=200)
def callback(event):
print('当前位置为:',event.x,event.y)
frame.bind('<Button-1>',callback)
frame.pack()
mainloop()

结果:

    

  接受键盘事件,只有组件获取焦点才能接受键盘事件,用focus_set()获取焦点

from tkinter import *
root = Tk()
def callback(event):
print('敲击位置:',repr(event.char))
frame = Frame(root,width=200,height=200)
frame.bind('<Key>',callback)
frame.focus_set()
frame.pack()
mainloop()

结果:

    

  获取鼠标的运动轨迹,用的是<Motion>

from tkinter import *
root = Tk()
def callback(event):
print('当前位置:',event.x,event.y)
frame = Frame(root,width = 600,height=200)
frame.bind('<Motion>',callback)
frame.pack()
mainloop()

结果:

    

Toplevel:

  说明:顶级窗口,用于显示额外的窗口,其他弹出的窗口

from tkinter import *
root = Tk()
def show():
top = Toplevel()
top.title('山丘')
top.geometry('200x200')
Label(top,text='越过山丘').pack()
Button(root,text='创建顶级窗口',command=show).pack()
mainloop()

结果:

      

  这里还有一个attributes方法,用于设置窗口的属性

from tkinter import *
root = Tk()
def show():
top = Toplevel()
top.title('山丘')
top.geometry('200x200')
top.attributes('-alpha',0.5)  #设置窗口透明度为50%
Label(top,text='越过山丘').pack()
Button(root,text='创建顶级窗口',command=show).pack()
mainloop()

结果:

    

标准对话框:

  说明:主要有三个模块,messagebox(消息对话框),filedialog(文件对话框),colorchooser(颜色对话框)

消息对话框:

  一共有七种样式,格式是:showwarning(title,message,options)

    title:设置标题栏文本

    message:设置文本内容

    options:设置选项的含义

  返回值:

    askokcancel(),askretrycancel(),askyesno()返回的是布尔类型的值

    askquestion()返回的是‘yes’或‘no’

    showerror(),showinfo(),showwarning()返回的是‘ok’表示用户单击了‘确定’

from tkinter import *
from tkinter import messagebox
root = Tk()
def show():
#messagebox.askokcancel('山丘','askokcancel')
#messagebox.askquestion('山丘','askquestion')
#messagebox.askretrycancel('山丘','askretrycancel')
#messagebox.askyesno('山丘','askyesno')
#messagebox.showerror('山丘','showerror')
#messagebox.showinfo('山丘','showinfo')
messagebox.showwarning('山丘','showwarning')
Button(root,text='打开',command=show).pack()
mainloop()

结果:

              

文件对话框:

  两个函数 askopenfilename()打开文件,asksaveasfilename()保存文件

  常用的值:

    initialdir:指定打开或保存的路径

  返回值:

    如果用户选择了一个文件,那么返回的就是该文件的完整路径

    如果用户选择了取消按钮,那么返回的就是空的字符串   

from tkinter import *
from tkinter import filedialog
root = Tk()
def show():
filedialog.askopenfilename(initialdir=r'路径名')
Button(root,text='打开文件',command=show).pack()
mainloop()

颜色对话框:

  返回值:

    如果用户选择了一个颜色并点击确定按钮,返回一个二元组,第一个元素是RGB颜色值,第二个是对应的元素的十六进制颜色值

    如果用户点击取消,返回的是(None,None)

from tkinter import *
from tkinter import colorchooser
root = Tk()
def show():
colorchooser.askcolor()
Button(root,text='选择颜色',command=show).pack()
mainloop()

结果:

  

  最后,做一个注册窗口

from tkinter import *
from tkinter import messagebox
root = Tk()
def show():
messagebox.askyesno('山丘','确认注册?')
def create():
#top.attributes('-alpha',0.5)
top = Toplevel(root)
top.title('山丘')
top.geometry('400x250')
Label(top,text='用户名:').place(x=20,y=50)
Label(top,text='密码:').place(x=20,y=120)
Entry(top).place(x=110,y=50)
Entry(top,show='*').place(x=110,y=120)
Button(top,text='确认注册',width=10,command=show).place(x=170,y=190)
root.title('山丘')
root.geometry('450x400')
Label(root,text='用户名:').place(x=100,y=170)
Label(root,text='密码:').place(x=100,y=230)
photo = PhotoImage(file='welcome.gif')
Label(root,image=photo).place(x=0,y=0)
Entry(root).place(x=190,y=170)
Entry(root,show='*').place(x=190,y=230)
Button(root,text='注册',width=10,command=create).place(x=100,y=300)
Button(root,text='提交',width=10).place(x=300,y=300)
mainloop()

结果:

    

参考文献:

  小甲鱼python教学视频

tkinter学习-事件绑定与窗口的更多相关文章

  1. python tkinter教程-事件绑定

    一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...

  2. Tkinter 之事件绑定

    import tkinter as tk window = tk.Tk() # 设置窗口大小 winWidth = 600 winHeight = 400 # 获取屏幕分辨率 screenWidth ...

  3. jQuery学习-事件绑定

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. python tkinter Treeview 事件绑定

    def trefun(event): sels= event.widget.selection()#event.widget获取Treeview对象,调用selection获取选择对象名称 for i ...

  5. tkinter之事件绑定

  6. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  7. Javascript事件绑定及深入

    由于开学后的编程实验课,接触了海量字符换搜索的实验,所以好几天没有学习JS课程了,今天继续学习事件绑定. 传统事件绑定存在一些问题,如:同名事件函数都执行,第二个函数会覆盖第一个. 下面我们以事件切换 ...

  8. python tkinter中的事件绑定

    一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...

  9. jQuery学习-事件之绑定事件(三)

    在上一篇<jQuery学习-事件之绑定事件(二)>我们了解了jQuery的dispatch方法,今天我们来学习下handlers 方法: handlers: function( event ...

随机推荐

  1. VRTK3.3.0-004传送

    直线传送: 一.无高度变换传送(VRTK_BasicTeleport) 1丶继续在VRScripts下创建空物体PlayArea,用来挂在传送相关脚本:创建Plane作为传送地面 2丶在PlayAre ...

  2. 33、JSONP跨域

    跨域请求数据也是可以的,只不过Ajax这技术不行,而JSONP这种数据格式可以进行跨域.很多年前,浏览器是没有跨域限制的,可以正常跨域,浏览器为了安全和隐私限制了Ajax跨域 JSONP原理就是:将函 ...

  3. 计算机网络自顶向下方法第2章-应用层(application-layer).1

    2.1 应用层协议原理 2.1.1网络应用程序体系结构 1)在客户-服务器体系结构 (client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为 ...

  4. OFFICE 365 A1 Plus账号注册

    OFFICE365 A1 Plus账号注册 Office2019与Office365专业增强版之间的区别: Office2019是一次性购买,不会在购买后接收功能更新,但会根据需要接收质量和安全修补程 ...

  5. JS中一个new到底做了哪些事情?

    1.https://www.cnblogs.com/faith3/p/6209741.html 2.https://www.cnblogs.com/AaronNotes/p/6529492.html

  6. nginx和uwsgi的区别和作用

    Django+uwsgi+nginx nginx和uwsgi的区别和作用: 1, nginx是对外的服务器,外部浏览器通过url访问nginx, uwsgi是对内的服务器,主要用来处理动态请求. 2, ...

  7. 单线程异步回调机制的缺陷与node的解决方案

    一.node单线程异步的缺陷: 单线程异步的优点自然不必多说,node之所以能够如此快的兴起,其单线程异步回调机制相比于传统同步执行编程语言的优势便是原因之一.然而,开发一个node程序,其缺陷也是不 ...

  8. 爬虫的两种解析方式 xpath和bs4

    1.xpath解析 from lxml import etree 两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点 (1)本地文件 tree = etree.parse(文 ...

  9. 如何使用KeyChain保存和获取UDID

    本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不变UDID的问题.并给出一个获取UDID的工具类,使用方便,只需要替换两个地方即可. 一.iOS ...

  10. Git 学习教程【转+总结】

    之前是在用SVN,现在因为小伙伴比较喜欢Git,所以也开始学习Git,很感谢 时光穿梭机 - 廖雪峰 的无私奉献.本文用来记录我在学习Git过程中的收获和笔记,廖雪峰大神的Git教程参考这里. 1.G ...