tkinter-event事件
Tkinter Event事件处理事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将零部件之间“优雅”的贯穿起来,因此“事件处理”可谓是 GUI 程序的“灵魂”,同时它也是实现人机交互的关键。
在一款 GUI 程序中,我们将用户对软件的操作统称为“事件”,比如鼠标点击按钮、键盘输入文本以及窗口管理器触发的重绘事件等,这些事件有一个共同的特点,即都是由用户直接或者间接触发的。
事件绑定方法
Tkinter 提供的事件处理机制允许我们为“控件”绑定相应的事件和事件处理函数(即 callback函数),从而实现控件与用户的交互语法格式:widget.bind(““,func)
widget 代表控件的实例对象,之后,采用 bind() 方法进行事件绑定该函数有两个参数::一个字符串参数,表示事件的类型,并使用“尖括号”的形式进行包裹;func:表示事件的处理函数(callback,即回调函数),当触发事件时,Tk 会携带事件对象(Event)去调用 func 方法。
注意:bind() 方法 ...
python搞笑表白
博主使用python 制作了一个网上经常看见的搞笑表白程序
本来是想将其打包成exe程序的,但是因为里面涉及有图片
所以打包起来非常的麻烦,所以博主这里就没有打包了
其实刚开始博主想制作的并不是现在做出来的这个程序 而是和用js css做出来的那种一样
但是由于 这里我主要使用的是tkinter这个GUI库,就里面的许多操作实现起来就比较麻烦
最后博主就做的这种的了
说说做这个的时候遇到的一些问题吧!
在子页面加载图片问题
通过使用tkinter里面自带的加载图片工具是加载不了的
解决:通过 opencv里面的加载图片方法(下面的程序就是使用的这种方法)
通过 PIL里面的加载图片方法,但是要注意加载的图片类型
不允许关闭主窗口问题
这个程序 ,你发给小姐姐,结果人家直接一个钢叉给你关闭了,你这白忙活一宿🤣 就尴尬了
解决:
1234567891011from Tkinter import *import tkMessageBox def callback(): if tkMessageBox.askokcancel("Quit", " ...
Tkinter-布局管理器
Tkinter布局管理器(三种方法详解)布局管理指的是通过管理控件在窗口中的位置(排版),从而实现对窗口和控件布局的目的。Tkinter 提供了一系列布局管理的方法和容器控件。
Tkinter 提供了三种常用的布局管理器,分别是 pack()、grid() 以及 place(),如下:
方法说明pack()按照控件的添加顺序其进行排列,遗憾的是此方法灵活性较差
grid()以行和列(网格)形式对控件进行排列,此种方法使用起来较为灵活
place()可以指定组件大小以及摆放位置,三个方法中最为灵活的布局方法
pack()
pack() 是一种较为简单的布局方法,在不使用任何参数的情况下,它会将控件以添加时的先后顺序,自上而下,一行一行的进行排列,并且默认居中显示。
pack() 方法的常用参数:anchor组件在窗口中的对齐方式,有 9 个方位参数值,比如”n”/“w”/“s”/“e”/“ne”,以及 “center” 等(这里的 e w s n分别代表,东西南北)
expand是否可扩展窗口,参数值为 True(扩展)或者 False(不扩展), ...
os模块简单使用
os.getcwd()作用:获取当前的工作路径;
os.listdir(path)传入任意一个path路径,返回的是该路径下所有文件和目录组成的列表;
os.walk(path)传入任意一个path路径,深层次遍历指定路径下的所有子文件夹,返回的是一个由路径、文件夹列表、文件列表组成的元组。我代码中写的方式属于元组拆包;
元组拆包:就是将一个元组中的每个值,赋值给不同的变量;
123456path = r"C:\Users\Desktop\publish\os模块"for path,dirs,files in os.walk(path): print(path) print(dirs) print(files) print("\n")
os.path.exists(path)123456path1 = 'C:\Users\Desktop\publish\os模块'if os.path.exists(path1): print("指定文件夹存在")else: print ...
python提升九
Python logging模块简单用法 logging 模块可以很容易地创建自定义的消息记录,这些日志消息将描述程序执行何时到达日志函数调用,并列出指定的任何变量当时的值。
启用 logging 模块很简单,直接将下面的代码复制到程序开头:
12import logginglogging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
当 Python 记录一个事件的日志时,它会创建一个 LogRecord 对象,保存关于该事件的信息。
1234import logginglogging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')for i in range(0,5): logging.debug('i is ' + str(i))
通过 logging.debug() ...
python提升八
什么是异常处理,Python常见异常类型编写程序时遇到的错误可大致分为 2 类,分别为语法错误和运行时错误。
Python语法错误语法错误,也就是解析代码时出现的错误。当代码不符合 Python 语法规则时,Python解释器在解析时就会报出 SyntaxError 语法错误,与此同时还会明确指出最早探测到错误的语句。
Python运行时错误运行时错误,即程序在语法上都是正确的,但在运行时发生了错误。在 Python 中,把这种运行时产生错误的情况叫做异常
Python异常处理机制使用 Python 的异常处理机制就可以解决这个问题
1234567try: if(用户输入不合理): raise 异常except Exception: alert 输入不合法 goto retry#正常的业务代码
此程序中,通过在 try 块中判断用户的输入数据是否合理,如果不合理,程序受 raise 的影响会进行到 except 代码块,对用户的错误输出进行处理,然后会继续执行正常的业务代码;反之,如果用户输入合理,那么程序将直接执行正常的业务代码。try excep ...
python提升七
Python可重载运算符有哪些这里给大家举一个与重载运算符相关的实例:
12345678910111213141516171819202122232425class MyClass: #自定义一个类 def __init__(self, name , age): #定义该类的初始化函数 self.name = name #将传入的参数值赋值给成员交量 self.age = age def __str__(self): #用于将值转化为字符串形式,等同于 str(obj) return "name:"+self.name+";age:"+str(self.age) __repr__ = __str__ #转化为供解释器读取的形式 def __lt__(self, record): #重载 self<record 运算符 if self.age < record.age: return True else: ...
python提升六
Python del()方法:销毁对象Python 通过调用 init() 方法构造当前类的实例化对象,而节 del() 方法,功能正好和 init() 相反,其用来销毁实例化对象。
事实上在编写程序时,如果之前创建的类实例化对象后续不再使用,最好在适当位置手动将其销毁,释放其占用的内存空间(整个过程称为垃圾回收(简称GC))。大多数情况下,Python 开发者不需要手动进行垃圾回收,因为 Python 有自动的垃圾回收机制,能自动将不需要使用的实例对象进行销毁。无论是手动销毁,还是 Python 自动帮我们销毁,都会调用 del() 方法
1234567class CLanguage: def __init__(self): print("调用 __init__() 方法构造对象") def __del__(self): print("调用__del__() 销毁对象,释放其空间")clangs = CLanguage()del clangs
读者千万不要误认为,只要为该实例对象调用 del() 方法, ...
Tkinter-Canvas画布控件
Tkinter Canvas画布控件Canvas 控件具有两个功能,1.它可以用来绘制各种图形如,弧形、线条、椭圆形、多边形和矩形等,2.Canvas 控件还可以用来展示图片(包括位图),我们将这些绘制在画布控件上的图形,称之为“画布对象”。
每一个画布对象都有一个“唯一身份ID”,这是 Tkinter 自动为其创建的,从而方便控制和操作这些画布对象。
通过 Canvas 控件创建一个简单的图形编辑器,让用户可以达到自定义图形的目的,就像使用画笔在画布上绘画一样,可以绘制各式各样的形状,从而有更好的人机交互体验。
常用属性:
background(bg)指定 Canvas 控件的背景颜色
borderwidth(bd)指定 Canvas 控件的边框宽度
closeenough
指定一个距离,当鼠标与画布对象的距离小于该值时,认为鼠标位于画布对象上
该选项是一个浮点类型的值
confine指定 Canvas 控件是否允许滚动超出
scrollregion项设置的滚动范围,默认值为 True
selectbackground指定当画布对象(即在 Canvas 画布上绘制的图形)被选中 ...
python提升五
Python MetaClass元类详解MetaClass元类,本质也是一个类,但和普通类的用法不同,它可以对类内部的定义(包括类属性和类方法)进行动态的修改。可以这么说,使用元类的主要目的就是为了实现在创建类时,能够动态地改变类中定义的属性或者方法。
如果在创建类时,想用 MetaClass 元类动态地修改内部的属性或者方法,则类的创建过程将变得复杂:
先创建 MetaClass 元类,然后用元类去创建类,最后使用该类的实例化对象实现功能。和前面创建的类不同,如果想把一个类设计成 MetaClass 元类,其必须符合以下条件:
必须显式继承自 type 类;类中需要定义并实现 new() 方法,该方法一定要返回该类的一个实例对象,因为在使用元类创建类时,该 new() 方法会自动被执行,用来修改新建的类。
12345678#定义一个元类class FirstMetaClass(type): def __new__(cls, name, bases, attrs): # 动态为该类添加一个name属性 attrs['name'] = ...