if 判断条件1:执行语句1……elif 判断条件2:执行语句2……elif 判断条件3:执行语句3……else:执行语句4……
xxxxxxxxxxwhile 判断条件(condition):执行语句(statements)……
xxxxxxxxxxfor iterating_var in sequence:statements(s)
加号拼接(针对字符串)
format格式
print(f “{}”) 的用法
输出百分比方法
xxxxxxxxxxprint("python" + "XXX")a,b,c = "A","B","C"print("XXX{0}XXX{1}XXX{2}".format(a,b,c))print(f"XXX{a}XXX{b}XXX{c}")d=25.66666print("%.0f%%") # 26%print("%.2f%%") # 25.67%
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
xxxxxxxxxximport rere.match(pattern, string, flags=0)# pattern 匹配的正则表达式
扫描整个字符串并返回第一个成功的匹配。
xxxxxxxxxxre.search(pattern, string, flags=0)# pattern 匹配的正则表达式
在文件开头加入 # -*- coding: UTF-8 -*- 或者 # coding=utf-8
Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
xxxxxxxxxx#!/usr/bin/python3# coding=utf-8# -*- coding: UTF-8 -*-
判断一个目录是文件夹还是文件
ximport osos.path.getsize(path) # 获取文件大小,单位B, path=路径+文件名os.path.getsize(path)/1024 # 获取文件大小,单位KB, path=路径+文件名os.path.isdir(path) # 返回True,表示是文件夹,path=路径+文件名os.path.isfile(path) # 返回True 表示是文件,path=路径+文件名os.path.exists(path) # 判断文件或文件夹是否存在,path=路径+文件名os.listdir(path) # 获取当前目录(不遍历子目录)下的文件夹和文件,path=路径+文件名os.getcwd(path) # 获取当前工作目录os.chdir(path) # 改变当前目录,path可以是绝对路径或相对路径# 遍历获取指定目录下的文件夹和文件以及子文件夹文件# top 是遍历的目录地址,返回一个三元组(root,dirs,files)os.walk(top[,topdown=True[,onerror=None[,followlinks=False]]])os.path.join(path,file) # 连接路径和文件名s = r"C:\Users\Administrator\Desktop\Python\xxx.py"os.path.dirnames(s) # 获取路径, C:\Users\Administrator\Desktop\Pythonos.path.basenames(s) # 获取文件名xxx.pyos.path.splitext(s) # 将路径拆分为文件名+扩展名["C:\Users\Administrator\Desktop\Python","xxx.py"]os.mkdir() # 当父目录不存在时,不创建,并报错os.makedirs() # 当父目录不存在时,自动创建os.remove() #
获取文件夹下所有的文件名(不遍历子目录)
xxxxxxxxxxfor file in os.listdir(path):print(file)# 路径+文件名file_path = os.path.join(path,file)print(file_path)
xxxxxxxxxxs = r"C:\Users\Administrator\Desktop\Python\xxx.py"# 取得文件名 xxx.pys.split("\\")[-1]
xxxxxxxxxxn=s.rfind("\\")s[n+1:] # xxx.pys[:n] # "C:\Users\Administrator\Desktop\Python"
xxxxxxxxxxos.path.dirname(s) # 获取路径, C:\Users\Administrator\Desktop\Pythonos.path.basename(s) # 获取文件名xxx.pyos.path.splitext(s) # 拆分为列表[路径,文件名],["C:\Users\Administrator\Desktop\Python","xxx.py"]
xxxxxxxxxxpip install pillow # 安装库
xxxxxxxxxxfrom PIL import Imageimg = Image.open("pic/cat.jpg")# 保存,quality是压缩比率img.save("cat-out2.jpg", quality=20)
xxxxxxxxxximg = Image.open("pic/cat.jpg")width, height = img.size
resize()与thumbnail()方法
xxxxxxxxxx方法1# 生成新图片newimg = img.resize((width, height),Image.ANTIALIAS) # 缩放newimg.save(save_path)方法2# 原图片进行img.thumbnail((width, height))img.save(save_path)
xxxxxxxxxx# 使用pip工具安装 pyinstaller库pip install pyinstaller# 进入打包py文件所在目录# 在目标文件夹地址栏直接输入:cmd 或者 Shift+右键进入命令窗口pyinstaller xxx.py # pyinstaller -D xxx.py# 打包成一个EXE文件pyinstaller -F xxx.py
等待打包结束后当前路径下会多两个文件夹build和dist,打包好的文件在dist文件夹内,里面有很多文件,多为程序运行的动态库。
更改exe文件的图标
xxxxxxxxxxpyinstaller -F --i con=1234.ico XXX.py
1234.ico为当前路径下的图标文件,在其他位置需要加上路径
Tkinter 是 Python 的标准 GUI 库。Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。
xxxxxxxxxximport tkinter as tk
xxxxxxxxxximport tkinterfrom tkinter import filedialog as fdgroot = tkinter.Tk() # 创建一个Tkinter.Tk()实例root.withdraw() # 将Tkinter.Tk()实例隐藏default_dir = r"C:\Users\Administrator"mypath = fdg.askdirectory(initialdir=default_dir) # 选择文件夹# mypath = fdg.askopenfilename(title=u'选择文件',initialdir=default_dir) # 选择文件if len(mypath)<5:print("你啥也没有选择!")print(mypath)print("finished")
Python3中tkinter模块使用方法详解 https://blog.51cto.com/u_13727606/3130426
root.title('标题名') 修改框体的名字,也可在创建时使用className参数来命名; root.resizable(0,0) 框体大小可调性,分别表示x,y方向的可变性; root.geometry('250x150') 指定主框体大小; root.quit() 退出; root.update_idletasks() root.update() 刷新页面;
xxxxxxxxxximport tkinterroot=tkinter.Tk() #生成root主窗口label=tkinter.Label(root,text='Hello,GUI') #生成标签label.pack() #将标签添加到主窗口button1=tkinter.Button(root,text='Button1') #生成button1button1.pack(side=tkinter.LEFT) #将button1添加到root主窗口button2=tkinter.Button(root,text='Button2')button2.pack(side=tkinter.RIGHT)root.mainloop() #进入消息循环(必需组件)
在Tkinter中窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。
xxxxxxxxxxButton 按钮;Canvas 绘图形组件,可以在其中绘制图形;Checkbutton 复选框;Entry 文本框(单行);Text 文本框(多行);Frame 框架,将几个组件组成一组Label 标签,可以显示文字或图片;Listbox 列表框;Menu 菜单;Menubutton 它的功能完全可以使用Menu替代;Message 与Label组件类似,但是可以根据自身大小将文本换行;Radiobutton 单选框;Scale 滑块;允许通过滑块来设置一数字值Scrollbar 滚动条;配合使用canvas, entry, listbox, and text窗口部件的标准滚动条;Toplevel 用来创建子窗口窗口组件。
xxxxxxxxxxpack组件设置位置属性参数:after: 将组件置于其他组件之后;before: 将组件置于其他组件之前;anchor: 组件的对齐方式,顶对齐'n',底对齐's',左'w',右'e'side: 组件在主窗口的位置,可以为'top','bottom','left','right'(使用时tkinter.TOP,tkinter.E);fill 填充方式 (Y,垂直,X,水平)expand 1可扩展,0不可扩展grid组件使用行列的方法放置组件的位置,参数有:column: 组件所在的列起始位置;columnspam: 组件的列宽;row: 组件所在的行起始位置;rowspam: 组件的行宽;place组件可以直接使用坐标来放置组件,参数有:anchor: 组件对齐方式;x: 组件左上角的x坐标;y: 组件右上角的y坐标;relx: 组件相对于窗口的x坐标,应为0-1之间的小数;rely: 组件相对于窗口的y坐标,应为0-1之间的小数;width: 组件的宽度;heitht: 组件的高度;relwidth: 组件相对于窗口的宽度,0-1;relheight: 组件相对于窗口的高度,0-1;
xxxxxxxxxxanchor: 指定按钮上文本的位置;background(bg) 指定按钮的背景色;bitmap: 指定按钮上显示的位图;borderwidth(bd) 指定按钮边框的宽度;command: 指定按钮消息的回调函数;cursor: 指定鼠标移动到按钮上的指针样式;font: 指定按钮上文本的字体;foreground(fg) 指定按钮的前景色;height: 指定按钮的高度;image: 指定按钮上显示的图片;state: 指定按钮的状态(disabled);text: 指定按钮上显示的文本;width: 指定按钮的宽度padx 设置文本与按钮边框x的距离,还有pady;activeforeground 按下时前景色textvariable 可变文本,与StringVar等配合着用
xxxxxxxxxxbackground(bg) 文本框背景色;foreground(fg) 前景色;selectbackground 选定文本背景色;selectforeground 选定文本前景色;borderwidth(bd) 文本框边框宽度;font 字体;show 文本框显示的字符,若为*,表示文本框为密码框;state 状态;width 文本框宽度textvariable 可变文本,与StringVar等配合着用
xxxxxxxxxxAnchor 标签中文本的位置;background(bg) 背景色;foreground(fg) 前景色;borderwidth(bd) 边框宽度;width 标签宽度;height 标签高度;bitmap 标签中的位图;font 字体;image 标签中的图片;justify 多行文本的对齐方式;text 标签中的文本,可以使用'\n'表示换行textvariable 显示文本自动更新,与StringVar等配合着用
xxxxxxxxxxanchor 文本位置;background(bg) 背景色;foreground(fg) 前景色;borderwidth 边框宽度;width 组件的宽度;height 组件高度;bitmap 组件中的位图;image 组件中的图片;font 字体;justify 组件中多行文本的对齐方式;text 指定组件的文本;value 指定组件被选中中关联变量的值;variable 指定组件所关联的变量;indicatoron 特殊控制参数,当为0时,组件会被绘制成按钮形式;textvariable 可变文本显示,与StringVar等配合着用
对于按钮组件、菜单组件等可以在创建组件时通过command参数指定其事件处理函数。方法为bind;或者用bind_class方法进行类绑定,bind_all方法将所有组件事件绑定到事件响应函数上。
xxxxxxxxxxbackground(bg) 背景色;foreground(fg) 前景色;borderwidth 组件边框宽度;width 组件宽度;height 高度;bitmap 位图;image 图片;绘图的方法主要以下几种:create_arc 圆弧;create_bitmap 绘制位图,支持XBM;create_image 绘制图片,支持GIF(x,y,image,anchor);create_line 绘制支线;create_oval; 绘制椭圆;create_polygon 绘制多边形(坐标依次罗列,不用加括号,还有参数,fill,outline);create_rectangle 绘制矩形((a,b,c,d),值为左上角和右下角的坐标);create_text 绘制文字(字体参数font,);create_window 绘制窗口;delete 删除绘制的图形;itemconfig 修改图形属性,第一个参数为图形的ID,后边为想修改的参数;move 移动图像(1,4,0),1为图像对象,4为横移4像素,0为纵移像素,然后用root.update()刷新即可看到图像的移动,为了使多次移动变得可视,最好加上time.sleep()函数;只要用create_方法画了一个图形,就会自动返回一个ID,创建一个图形时将它赋值给一个变量,需要ID时就可以使用这个变量名。coords(ID) 返回对象的位置的两个坐标(4个数字元组);
xxxxxxxxxx参数:tearoff 分窗,0为在原窗,1为点击分为两个窗口bg,fg 背景,前景borderwidth 边框宽度font 字体activebackgound 点击时背景,同样有activeforeground,activeborderwidth,disabledforegroundcursorpostcommandselectcolor 选中时背景takefocustitletyperelief方法:menu.add_cascade 添加子选项menu.add_command 添加命令(label参数为显示内容)menu.add_separator 添加分隔线menu.add_checkbutton 添加确认按钮delete 删除
xxxxxxxxxxbind(sequence,func,add)——bind_class(className,sequence,func,add)bind_all(sequence,func,add)事件参数:sequence 所绑定的事件;func 所绑定的事件处理函数;add 可选参数,为空字符或‘+’;className 所绑定的类;鼠标键盘事件<Button-1> 鼠标左键按下,2表示中键,3表示右键;<ButtonPress-1> 同上;<ButtonRelease-1> 鼠标左键释放;<B1-Motion> 按住鼠标左键移动;<Double-Button-1> 双击左键;<Enter> 鼠标指针进入某一组件区域;<Leave> 鼠标指针离开某一组件区域;<MouseWheel> 滚动滚轮;<KeyPress-A> 按下A键,A可用其他键替代;<Alt-KeyPress-A> 同时按下alt和A;alt可用ctrl和shift替代;<Double-KeyPress-A> 快速按两下A;<Lock-KeyPress-A> 大写状态下按A;窗口事件Activate 当组件由不可用转为可用时触发;Configure 当组件大小改变时触发;Deactivate 当组件由可用转变为不可用时触发;Destroy 当组件被销毁时触发;Expose 当组件从被遮挡状态中暴露出来时触发;Unmap 当组件由显示状态变为隐藏状态时触发;Map 当组件由隐藏状态变为显示状态时触发;FocusIn 当组件获得焦点时触发;FocusOut 当组件失去焦点时触发;Property 当窗体的属性被删除或改变时触发;Visibility 当组件变为可视状态时触发;响应事件event对象(def function(event)):char 按键字符,仅对键盘事件有效;keycode 按键名,仅对键盘事件有效;keysym 按键编码,仅对键盘事件有效;num 鼠标按键,仅对鼠标事件有效;type 所触发的事件类型;widget 引起事件的组件;width,heigh 组件改变后的大小,仅Configure有效;x,y 鼠标当前位置,相对于窗口;x_root,y_root 鼠标当前位置,相对于整个屏幕
xxxxxxxxxxmessagebox._show函数的控制参数:default 指定消息框按钮;icon 指定消息框图标;message 指定消息框所显示的消息;parent 指定消息框的父组件;title 标题;type 类型;simpledialog模块参数:title 指定对话框的标题;prompt 显示的文字;initialvalue 指定输入框的初始值;filedialog 模块参数:filetype 指定文件类型;initialdir 指定默认目录;initialfile 指定默认文件;title 指定对话框标题colorchooser模块参数:initialcolor 指定初始化颜色;title 指定对话框标题;
一般格式: ('Times -10 bold') ('Times',10,'bold','italic') 依次表示字体、字号、加粗、倾斜
补充: config 重新配置 label.config(font='Arial -%d bold' % scale.get()) 依次为字体,大小(大小可为字号大小),加粗 tkinter.StringVar 能自动刷新的字符串变量,可用set和get方法进行传值和取值,类似的还有IntVar,DoubleVar...
sys.stdout.flush() 刷新输出
一个自己用tkinter写的计算器程序
xxxxxxxxxx#filename:Caculaterimport tkinter,time,decimal,math,stringroot=tkinter.Tk()root.title('计算器')root.resizable(0,0)global cuncu, vartext, result, fuhaoresult = fuhao = Nonevartext = tkinter.StringVar()cuncu = []class anjianzhi:global cuncu, vartext, result, fuhaodef __init__(self,anjian):self.anjian = anjiandef jia(self):cuncu.append(self.anjian)vartext.set( ''.join(cuncu))def tui(self):cuncu.pop()vartext.set(''.join(cuncu))def clear(self):cuncu.clear()vartext.set('')result = Nonefuhao = Nonedef zhengfu(self):if cuncu[0]:if cuncu[0] == '-':cuncu[0] = '+'elif cuncu[0] == '+':cuncu[0] = '-'else:cuncu.insert(0, '-')vartext.set(''.join(cuncu))def xiaoshudian(self):if cuncu.count('.') >= 1:passelse:if cuncu == [] :cuncu.append('0')cuncu.append('.')vartext.set(''.join(cuncu))def yunshuan(self):global cuncu, vartext, result, fuhaoif vartext.get() == '':passelse:get1 = decimal.Decimal(vartext.get())if self.anjian in ('1/x','sqrt'):if self.anjian == '1/x':result = 1/get1elif self.anjian == 'sqrt':result = math.sqrt(get1)elif self.anjian in ('+','-','*','/','='):if fuhao is not None:get1 = decimal.Decimal(result)get2 = decimal.Decimal(vartext.get())if fuhao == '+':result = get1 + get2elif fuhao == '-':result = get1 - get2elif fuhao == '*':result = get1 * get2elif fuhao == '/':result = get1 / get2else:result = get1if self.anjian == '=':fuhao = Noneelse:fuhao = self.anjianprint(fuhao)print(result)vartext.set(str(result))cuncu.clear()def copy1():# tkinter.Misc().clipboard_clear()tkinter.Misc().clipboard_append(string(vartext.get()))def buju(root):global cuncu, vartext, result, fuhaoentry1 = tkinter.Label(root, width=30, height=2, bg='white', anchor='se', textvariable=vartext)entry1.grid(row=0, columnspan=5)buttonMC=tkinter.Button(root,text='MC',width=5)buttonMR=tkinter.Button(root,text='MR',width=5)buttonMS=tkinter.Button(root,text='MS',width=5)buttonM1=tkinter.Button(root,text='M+',width=5)buttonM2=tkinter.Button(root,text='M-',width=5)buttonMC.grid(row=1,column=0)buttonMR.grid(row=1,column=1)buttonMS.grid(row=1,column=2)buttonM1.grid(row=1,column=3)buttonM2.grid(row=1,column=4)buttonJ=tkinter.Button(root,text='←',width=5,command=anjianzhi('c').tui)buttonCE=tkinter.Button(root,text='CE',width=5)buttonC=tkinter.Button(root,text=' C ',width=5,command=anjianzhi('c').clear)button12=tkinter.Button(root,text='±',width=5,command=anjianzhi('c').zhengfu)buttonD=tkinter.Button(root,text='√',width=5,command=anjianzhi('sqrt').yunshuan)buttonJ.grid(row=2,column=0)buttonCE.grid(row=2,column=1)buttonC.grid(row=2,column=2)button12.grid(row=2,column=3)buttonD.grid(row=2,column=4)button7=tkinter.Button(root,text=' 7 ',width=5,command=anjianzhi('7').jia)button8=tkinter.Button(root,text=' 8 ',width=5,command=anjianzhi('8').jia)button9=tkinter.Button(root,text=' 9 ',width=5,command=anjianzhi('9').jia)buttonc=tkinter.Button(root, text=' / ',width=5,command=anjianzhi('/').yunshuan)buttonf= tkinter.Button(root, text=' % ',width=5)button7.grid(row=3,column=0)button8.grid(row=3,column=1)button9.grid(row=3,column=2)buttonc.grid(row=3,column=3)buttonf.grid(row=3,column=4)button4=tkinter.Button(root,text=' 4 ',width=5,command=anjianzhi('4').jia)button5=tkinter.Button(root,text=' 5 ',width=5,command=anjianzhi('5').jia)button6=tkinter.Button(root,text=' 6 ',width=5,command=anjianzhi('6').jia)buttonx=tkinter.Button(root,text=' * ',width=5,command=anjianzhi('*').yunshuan)buttonfs=tkinter.Button(root,text='1/x',width=5,command=anjianzhi('1/x').yunshuan)button4.grid(row=4,column=0)button5.grid(row=4,column=1)button6.grid(row=4,column=2)buttonx.grid(row=4,column=3)buttonfs.grid(row=4,column=4)button1 = tkinter.Button(root, text=' 1 ',width=5,command=anjianzhi('1').jia)button2 = tkinter.Button(root, text=' 2 ',width=5,command=anjianzhi('2').jia)button3 = tkinter.Button(root, text=' 3 ',width=5,command=anjianzhi('3').jia)button_= tkinter.Button(root, text=' - ',width=5,command=anjianzhi('-').yunshuan)buttondy= tkinter.Button(root, text=' \n = \n ',width=5,command=anjianzhi('=').yunshuan)button1.grid(row=5, column=0)button2.grid(row=5, column=1)button3.grid(row=5, column=2)button_.grid(row=5, column=3)buttondy.grid(row=5, column=4,rowspan=2)button0=tkinter.Button(root,text=' 0 ',width=11,command=anjianzhi('0').jia)buttonjh = tkinter.Button(root,text=' . ',width=5,command=anjianzhi('c').xiaoshudian)buttonjia=tkinter.Button(root,text=' + ',width=5,command=anjianzhi('+').yunshuan)button0.grid(row=6,column=0,columnspan=2)buttonjh.grid(row=6,column=2)buttonjia.grid(row=6,column=3)def caidan(root):menu=tkinter.Menu(root)submenu1=tkinter.Menu(menu,tearoff=0)menu.add_cascade(label='查看',menu=submenu1)submenu2 = tkinter.Menu(menu, tearoff=0)submenu2.add_command(label='复制')submenu2.add_command(label='粘贴')menu.add_cascade(label='编辑',menu=submenu2)submenu = tkinter.Menu(menu, tearoff=0)submenu.add_command(label='查看帮助')submenu.add_separator()submenu.add_command(label='关于计算机')menu.add_cascade(label='帮助',menu=submenu)root.config(menu=menu)buju(root)caidan(root)root.mainloop()
grid(baseWidth=None, baseHeight=None, widthInc=None, heightInc=None) -- 通知窗口管理器该窗口将以网格的形式重新调整尺寸 -- baseWidth 和 baseHeight 指定 Tk_GeometryRequest 要求的网格单元数 -- widthInc 和 heightInc 指定网格单元的宽度和高度(像素
xxxxxxxxxxlabel = Label(root, text="")label["text"] = "这里写要显示的内容" / 常量 / 变量