python学习笔记之操作文件,模块使用
文件操作:
基础操作:
创建/打开文件:
#语法
file=open(filename,mode=’r’,buffering=-1,encoding=None,errors=None,newline=None,closefd=True,openr=None)filename 创建或打开的文件名称(在同一个文件夹内时),绝对路径(不在同一个文件夹内时)mode 文件的打开方式,默认打开方式只读(r)buffering 设置缓冲模式-1 :自动设置缓冲区,通常为4096或8192个字节0 :关闭缓冲区直接写入文件中Encoding 打开文件的编码方式errors 编码错误时的处理方式newline 换行方式closefd 文件描述时使用opener 文件描述时使用#例子:
file = open('test.txt','w')
file.write('第一次写入')
file = open('test.txt','r+')
file.write('第二次写入覆盖第一次写入')file = open('test.txt','w')
file.write('第一次写入。')
print(file)
file = open('test.txt','a+')
file.write('第二次追加写入。')
print(file)
mode常用的打开方式:
关闭文件:
#语法
file.close()
读取文件:
常用方法 | 说明 |
file.read([number]) |
这种方式用于读取文本的指定字符串长度 |
file.readline() |
这种方式读取文本的第一行内容 |
flie.readlines() |
这种方式读取了文本的所有内容,并把每一行内容放到一个list中 |
file.flush() |
刷新缓冲区,立即写到磁盘上 |
file.seek(index) |
移动文件到指定的索引处,从此位置开始读取,但写入从最后开始 |
with open |
使用完自动关闭,省去file.close()操作 |
encoding='utf-8' |
读写的文件含中文时添加 |
# file.read([number]) 读写指定字符串
file = open('test.txt','w')
file.write('第一次写入的内容。')
file = open('test.txt','a+')
file.write('第二次追加写入的内容。')
print(file.read(8))
file.close()#file.readline() 读取一行内容
file = open('test.txt','w')
file.write('第一次写入的内容。')
file = open('test.txt','a+')
file.write('\n')
file.write('第二次追加写入的内容。')
print(file.readline())
file.close()#file.readlines() 按行全部读取,返回列表的形式
file = open('test.txt','w')
file.write('第一次写入的内容。')
file = open('test.txt','a+')
file.write('\n')
file.write('第二次追加写入的内容。')
print(file.readlines())
file.close()
file = open('test.txt','r')
print(file.readlines())
file.close()#file.seel(index) 按照索引读取
管理文件:
os模块:
常用方法 | 功能 |
os.access(path, name) |
特权模式 |
os.chdir(path) |
改变当前工作目录 |
os.chflags(path, flags) |
设置路径的标记为数字标记 |
os.chmod(path, name) |
更改权限 |
os.chown(path, uid, gid) |
更改文件所有者 |
os.chroot(path) |
改变当前进程的根目录os.close(x) |
os.close(x) |
关闭文件 |
os.fchdir(x) |
通过文件描述符改变当前工作目录 |
os.getcwd() |
返回当前工作目录 |
os.listdir(path) |
返回当前目录下的所有文件及文件夹的列表 |
os.mkdir(path[,name]) |
创建一个名字为name的文件夹名 |
os.open(file) |
打开一个文件 |
os.remove(path) |
删除path路径的文件 |
os.rename(src,dst) |
修改文件名,src为源文件,dst为目标文件 |
os.rmdir(path) |
删除path对应的目录 |
import os
os.name#返回nt为windows,posix为Linux、Unix或mac os。
os.linesep#当前系统的换行符
os.sep#当前系统的分隔符
os.name
print(os.name,os.linesep,os.sep,os.name)
os.path模块:
常用方法 | 功能 |
os.path.abspath(path) |
返回路径名路径的规范化绝对化版本 |
os.path.basename(path) |
返回路径名路径的基名称 |
os.path.commonprefix(list) |
返回序列路径中每个路径名的最长公共子路径 |
os.path.dirname(path) |
返回路径名路径的目录名 |
os.path.exists(path) |
如果路径引用现有路径或打开的文件描述符,则返回True,中断的符号链接返回Flase |
os.path.lexists |
如果路径引用现有路径,则返回True |
os.path.expanduser(path) |
返回参数,初始组件为~或~user替换为该用户的主目录 |
os.path.expandvars(path) |
返回环境变量展开的参数 |
os.path.getatime(path) |
返回路径的最后访问时间 |
os.path.getmtime(path) |
返回上次修改路径的时间 |
os.path.getctime(path) |
返回文件 path 的创建时间 |
os.path.getsize(path) |
返回路径的大小,以字节为单位 |
os.path.isabs(path) |
如果路径是绝对路径名,则返回True |
os.path.isfile(path) |
如果路径是文件,则返回True |
os.path.isdir(path) |
如果路径是目录,则返回True |
os.path.islink(path) |
如果路径是链接,则返回True |
os.path.ismount(path) |
如果路径是挂载点,则返回True |
os.path.join(path1[, path2[, ...]]) |
把目录和文件名合成一个路径 |
os.path.normcase(path) |
转换path的大小写和斜杠 |
os.path.normpath(path) |
规范path字符串形式 |
os.path.realpath(path) |
返回path的真实路径 |
os.path.relpath(path[, start]) |
计算相对路径 |
os.path.samefile(path1, path2) |
判断目录或文件是否相同 |
os.path.sameopenfile(fp1, fp2) |
判断fp1和fp2是否指向同一文件 |
#os.path模块:针对路径的模块,模块内提供对文件、目录和路径管理的函数最常用:abspath() 返回路径名路径的规范化绝对化版本exists(path) 如果路径引用现有路径或打开的文件描述符,则返回True,中断的符号链接返回Flasejoin(path,name) 把目录和文件名合成一个路径basename(path) 返回路径名路径的基名称dirname(path) 返回路径名路径的目录名isdir(path) 如果路径是目录,则返回Trueimport os
print('当前目录:',os.getcwd())
print('判断当前目录是否存在,存在的话返回True',os.path.exists(os.getcwd()))
目录管理:
创建一级目录:
#语法:
os.mkdir(path)#例子:
import os
if not os.path.exists('一级目录'):os.mkdir('一级目录') print('创建完成')
else:print('目录已存在')
创建多级目录:
#语法:
os.makedirs(path)#例子:
import os
now = os.getcwd()
os.makedirs('one\two\three')
print('创建成功')
删除目录:
#语法:os.rmdir(path) 删除的目录中不存在子目录或者文件#例子:
import os
os.rmdir('一级目录')
print('删除完成')
项目管理:
重命名:
#语法:
os.rename(src,dst)src 更改的文件或者目录名dst 新的名字#例子:
import os
print(os.getcwd())#如果不知道当前的目录,先输出找到当前的目录。
os.mkdir(r'C:\Users\轻烟\PycharmProjects\untitled1\teach\new')#注意这个r,如果存在\t,\n这种内容,在前面加r。import os
os.rename(r'C:\Users\轻烟\PycharmProjects\untitled1\teach\new',r'C:\Users\轻烟
\PycharmProjects\untitled1\teach\newname')
删除文件:
#语法:
os.remove(path)path 删除文件的路径,使用相对路径或者绝对路径,最好使用绝对路径#例子:
#相对路径
import os
os.remove('tst.py')#绝对路径
import os
os.remove(r'C:\Users\轻烟\PycharmProjects\untitled1\venv\tst.py')
获取文件信息:
#语法:
os.stat() 获取文件相关信息#例子:
import os
file = os.stat('test.py')
print(os.path.abspath('test.py'))#先访问路径
print(file.st_dev)#设备号
print(file.st_size)#文件大小
print(file.st_atime)#最后一次访问
print(file.st_mtime)#最后一次修改时间
模块导入:
方法:
import 模块名form 模块名 import 模块/类/函数/变量/*(全部导入)import 模块名 as 别名form 模块名 import 模块/类/函数/变量/*(全部导入) as 别名
GUI编程:
含义:
图形用户界面,又称图形用户接口,简称GUI
是指采用图形方式显示的计算机操作用户界面
常用的GUI模块:
模块名 | 说明 |
Tkinker | Tkinter是一种标准的接口,这个模块存在于Python内部中供我们使用,它是一个轻量级的跨平台工具 |
wxPython | wxPython是一种较为流行的GUI模块 |
Flexx | 倾向于web方面的模块 |
Kivy | Kivy是开源Python函式库,用于开发行动应用程序和其它采用自然用户界面的多点触控应用软件 |
PyQt | PyQt 是 KDE 的底层 GUI 库的 Python 封装 |
PyGTK | PyGTK 是 Gnome 的底层 GUI 库 GTK+ 的 Python 封装 |
最常用的:
模块名 | 说明 | 下载 |
Tkinker | Tkinter是一种标准的接口,这个模块存在于Python内部中供我们使用,它是一个轻量级的跨平台工具 | 内置,无序安装 |
wxPython | wxPython是一种较为流行的GUI模块 |
pip - - default - timeout = 100 install - U wxPython
|
注意:python一定要使用3.9版本以及以下版本
下载时间很长,建议这个时间追个剧或者刷个视频
下载wxPython成功 :
黄色内容是提示你要更新pip,不是报错信息
python -m pip install --upgrade pip 更新pip即可
Tkinter模块:
常用控件:
常用控件 | 控件作用 |
Button |
按钮,点击触发事件 |
Canvas |
画布,即GUI界面的大小 |
Tk |
创建应用程序主窗口 |
Checkbutton |
可选择的多个按钮 |
Entry |
输入框 |
Frame |
窗口,可承载其他控件 |
Label |
标签,可显示文字或者图片 |
Listbox |
列表框,可从列表框中选择一个 |
Menu |
菜单栏,可以选择一个 |
Menubutton |
菜单按钮 |
Message |
消息文本框 |
Radiobutton |
单选按钮 |
Scale |
滑动条 |
Scrollbar |
滚动条 |
Text |
文本供使用者输入信息 |
Toplevel |
创建一个弹出式窗口 |
创建窗口:
#语法:
window = tkinter.Tk()
window.mainloop() #启动窗口#例子:
import tkinter
window = tkinter.Tk()
window.minsize(366, 366) #设置最小尺寸
window.maxsize(566, 566) #设置最大尺寸
window.mainloop()
Label控件:
#语法
组件名 = tkinter.Label(放置的窗口,文本或图片,附加内容)
组件名.pack(side = ‘位置’)side取值:不设置 默认设置,居中对齐left 左对齐 right 右对齐top 上对齐bottom 下对齐import tkinter
def main():win = tkinter.Tk()win.minsize(366, 366)#最小尺寸win.maxsize(888, 888)#最大尺寸area_one = tkinter.Label(win,text='This is area_one',font=("华文行楷", 20), fg="red")area_one.pack(side = 'left')area_two = tkinter.Label(win,text='This is area_two',font=("黑体", 20), fg="blue")area_two.pack(side = 'right')area_three = tkinter.Label(win,text='This is area_three',font=("宋体", 20), fg="black")area_three.pack()win.mainloop()
if __name__ == '__main__':main()
Frame控件:
#作用:可在窗口内存放管理控件的容器side取值:不设置 默认设置,居中对齐left 左对齐 right 右对齐top 上对齐bottom 下对齐import tkinter
def main():win = tkinter.Tk()win.minsize(366, 366)#最小尺寸win.maxsize(888, 888)#最大尺寸frame_one = tkinter.Frame(win)#使用Frame控件area_one = tkinter.Label(frame_one,text = 'dotcpp',font = ("华文行楷", 20), fg="red")area_one.pack(side = 'top')#放在上边area_two = tkinter.Label(frame_one,text = 'Python',font = ("黑体", 20), fg="blue")area_two.pack(side = 'bottom')#放在下面frame_one.pack(side = 'left')#放在左边
#分界线 上面为左边的容器,下面为右边的容器frame_two = tkinter.Frame(win)area_one = tkinter.Label(frame_two,text = 'dotcpp',font = ("华文行楷", 20), fg = "red")area_one.pack(side = 'top')#放在上面area_two = tkinter.Label(frame_two,text = 'Python',font = ("黑体", 20), fg = "blue")area_two.pack(side = 'bottom')#放在下面frame_two.pack(side = 'right')#放在右边win.mainloop()
if __name__ == '__main__':main()
Button控件:
import tkinter
import tkinter.messagebox
win = tkinter.Tk()
win.minsize(166, 40) # 最小尺寸
def button_event():tkinter.messagebox.showinfo("Button事件", "学习很快乐!!!!!!!!!!")
button_one = tkinter.Button(win, text = "www.dotcpp.com", command = button_event)
button_one.pack()
win.mainloop()
Entry控件:
#语法:
my_entry = Entry(容器,可选项) 在键盘输入的文本信息容器:内容存放位置可选项:如下表
可选项样式 |
作用 |
bg和bd |
背景颜色和边框大小 |
cursor | 光标的形状 |
font | 文本字体 |
exportselection |
文本框内容是否复制功能 |
fg | 文字颜色 |
highlightcolor | 边框高亮的颜色 |
justify | 对齐方式 |
relief | 边框样式 |
selectbackground |
选择的文本背景颜色 |
selectborderwidth | 选择的文本背景边框宽度 |
selectforeground | 选择的文字颜色 |
state | 只读或可写控制 |
textvariable | 文本框的值 |
width | 文本框宽度 |
xscrollcommand | 水平方向滚动条 |
常用方法:
常用方法 | 作用 |
delete(first,last=None) |
删除first-last中的所有内容 delete(0,END)删除输入框所有内容 |
get() |
获取输入框内的所有内容 |
icursor(index) |
移动光标到index参数的位置 |
index(index) |
返回index参数对应的序号 |
insert(index, text) |
把text参数中的内容插入到索引为index的位置 |
Select_clear() |
清空文本框 |
xview(index) |
设置文本框链接的水平滚动条 |
#例子import tkinter as tk
import tkinter.messageboxwin = tk.Tk()frame_name = tk.Frame(win)#创建容器来存放登陆的Label(文本框)与Entry(输入框)frame_name.pack(side="top")#使该容器在页面的顶部
label_name = tk.Label(frame_name, text="Your Name : ")
label_name.pack(side="left")
entry_name = tk.Entry(frame_name, bd=5)
entry_name.pack(side="right")#在容器内创建Label与Entry,并使label在左,entry在右# 下面的同理:
frame_password = tk.Frame(win)
frame_password.pack()
label_password = tk.Label(frame_password, text="Your Password : ")
label_password.pack(side="left")
entry_password = tk.Entry(frame_password, bd=5)
entry_password.pack(side="right")def login():if entry_name.get() == "ll":if entry_password.get() == "lll":print(tkinter.messagebox.showinfo("login", "Success!"))else:print(tkinter.messagebox.showerror("login", "Failed!"))entry_name.delete(0, "end")entry_password.delete(0,"end")else:print(tkinter.messagebox.showerror("login", "Failed!"))entry_name.delete(0, "end")entry_password.delete(0,"end")def signin():print(tkinter.messagebox.showerror("signin", "Without Code!"))#必须先定义函数,否则点击按钮调用函数时会报函数不存在的错误frame_button = tk.Frame(win)#创建容器以存放按钮
frame_button.pack(side="bottom")#使该容器位于页面最下方
button_login = tk.Button(frame_button,text="login",activeforeground="red",activebackground="yellow",width="7",command=login
# command的意思是执行已定义的函数,不可执行下文中出现的函数(未定义的函数)
)
button_login.pack(side="left")# 下面的同理:
button_signin = tk.Button(frame_button,text="signin",activeforeground="blue",activebackground="pink",width="7",command=signin,
)
button_signin.pack(side="right")win.mainloop()
Radio控件:
import tkinter
win = tkinter.Tk()
win.title("Python教程")#给窗口取一个标题
win.minsize(366, 50) # 定义一个最小尺寸
def get_data():print('选择的为第%d项'%x.get())
x = tkinter.IntVar()# 在这里我们把一组单选框绑定为同一个变量
radio_one = tkinter.Radiobutton(win, text="选项1", value=1, variable=x,command=get_data)
radio_one.pack()
radio_two = tkinter.Radiobutton(win, text="选项2", value=2, variable=x,command=get_data)
radio_two.pack()
win.mainloop()
Check控件:
import tkinter
win = tkinter.Tk()
win.title("Python教程")
win.minsize(200,200)
def get_data():my_str = ''if x.get() == True:my_str += "已选择选项1\n"if y.get() == True:my_str += "已选择选项2\n"if z.get() == True:my_str += "已选择选项3\n"text.delete(0.0, tkinter.END) # 清除text文板框中的内容text.insert(tkinter.INSERT, my_str) #把上面的信息插入到文本框中
x = tkinter.BooleanVar()
ckbutton_one = tkinter.Checkbutton(win, text="选项1", variable=x,command=get_data)
ckbutton_one.pack()
y = tkinter.BooleanVar()
ckbutton_two = tkinter.Checkbutton(win, text="选项2", variable=y,command=get_data)
ckbutton_two.pack()
z = tkinter.BooleanVar()
ckbutton_three = tkinter.Checkbutton(win, text="选项3", variable=z,command=get_data)
ckbutton_three.pack()
text = tkinter.Text(win, width=50, height=5)
text.pack()
win.mainloop()
Canvas控件:
#语法:
my_canvas = Canvas ( 父类, 可选项 )父类 一层窗口名,可选项 有bd、bg、continue、cursor、height、width、highlightcolor、relief、scrollregion
绘制图形的方法:
- create_line − 创建线条
#语法:
canvas.create_line(x1, y1, x2, y2, ..., xn, yn, options)左上角 右下角的坐标(x1,y1)(x2,y2)#例子:
import tkinter
class TK:def __init__(self):self.window = tkinter.Tk()self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink')self.canvas.create_line(30,30,100,200,200,200,300,200,300,300)self.canvas.pack()tkinter.mainloop()
m = TK()
create_rectangle − 创建矩形
#语法:
canvas.create_rectangle(x1,y1,x2,y2,可选项) 左上角 右下角的坐标(x1,y1)(x2,y2)
#例子:
import tkinter
class TK:def __init__(self):self.window = tkinter.Tk()self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink')self.canvas.create_rectangle(100,100,200,200)self.canvas.pack()tkinter.mainloop()
m = TK()
create_oval − 创建椭圆
#语法
canvas.create.oval(x1,y1,x2,y2,可选项)左上角 右下角的坐标(x1,y1)(x2,y2)
create_arc − 创建弧形
#语法:
canvas.create_arc(x1,y1,x2,y2,start = angle,extent = width,可选项)左上角 右下角的坐标(x1,y1)(x2,y2)start 弧形的起始角度extent 弧形逆时针角度范围#例子:
import tkinter
class TK:def __init__(self):self.window = tkinter.Tk()self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink')self.canvas.create_arc(60,60,220,220,start =0,extent = 120,fill ='blue')self.canvas.pack()tkinter.mainloop()
m = TK()
create_polygon − 创建多边形
#语法:
canvas.create_polygon(x1,y1,x2,y2,.....xn,yn,可选项)#例子:
import tkinter
class TK:def __init__(self):self.window = tkinter.Tk()self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink')self.canvas.create_polygon(150,0,200,100,300,100,200,185,280,280,150,230,20,280,100,185,0,100,100,100,fill ='red')self.canvas.pack()tkinter.mainloop()
m = TK()
wxPython模块:
基础:
#OnInit() 初始化这个子类
#Frame框架 容器,存放主程序的标题和功能
wx.Frame(parent,id=-1,title=’’,style=’’,name=’’,pos=wx.DefaultPositon,size=wx.DefaultSize)parent 框架所处的位置,父窗口的名字,顶级窗口:None,id 新窗口的ID号,通常设置为-1,title 窗口名称size 窗口大小style 窗口的类型name 框架的内部名字pos 对象,指定新窗口在界面中的位置Default 默认参数import wx
class App(wx.App):def OnInit(self):window = wx.Frame(parent = None,title = '初始化')window.Show()return True
if __name__ == '__main__':app = App()app.MainLoop()
文本控件:
静态文本控件:
#静态文本:屏幕显示的静态文字
#语法:
wx.StaticText(parent,id,label=’’,pos=wx.DefaultPositon,size=wx.DefaultSize,style=’’,name=’’)style取值:wx.ALIGN_CENTER 静态文本位于静态文本控件的中心wx.ALIGN_LEFT 文本在窗口部件中左对齐。这是默认的样式wx.ALIGN_RIGHT 文本在窗口部件中右对齐wx.ST_NO_AUTORESIZE 使用这个样式,在使用SetLabel()改变文本之后,静态文本控件不 将自我调整尺寸#修饰文本信息
wx.Font(pointSize,fimily,style,weight,underline=True,faceName=’’,encoding=wx.FONTENCODING_DEFAULT)pointSize 字体的尺寸family 字体的名字style 倾斜weight 宽度underline 下划线,True有,False为无faceName 字体名encoding 编码方式#例子:
import wx
class Frame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, wx.ID_ANY,"静态文本", size =(200, 170))panel = wx.Panel(self, -1) #创建一个容器wx.StaticText(panel, wx.ID_ANY, "春夜喜雨 ——杜甫。", (0, 10),(145, -1),wx.ALIGN_RIGHT)text = wx.StaticText(panel, wx.ID_ANY, "好雨知时节,当春乃发生。", (0, 30),(160, -1),wx.ALIGN_RIGHT)text = wx.StaticText(panel, wx.ID_ANY, "随风潜入夜,润物细无声。", (0,50), (160, -1),wx.ALIGN_RIGHT)text =wx.StaticText(panel, wx.ID_ANY, "野径云俱黑,江船火独明。", (0,70),(160, -1),wx.ALIGN_RIGHT)text =wx.StaticText(panel, wx.ID_ANY, "晓看红湿处,花重锦官城。", (0,90),(160, -1),wx.ALIGN_RIGHT)
if __name__ == '__main__':app = wx.App()frame = Frame()frame.Show(True)app.MainLoop()
文本输入控件:
#语法:
wx.TextCtrl(parent,id,value=’’,pos=wx.DefaultPositon,size=wx.DefaultSize,style,validator=wx.DefaultValidator,name=’’)validator 过滤数据style取值:wx.TE_CENTER 控件中的文本居中 wx.TE_LEFT 控件中的文本左对齐。wx.TE_NOHIDESEL 文本始终高亮显示,只适用于Windows wx.TE_PASSWORD 不显示所键入的文本,代替以星号显示wx.TE_PROCESS_ENTER 使用该样式,用户在控件内按下回车键时,一个文本输入事件被触发否则,按键事件内在的由该文本控件或该对话框管理wx.TE_PROCESS_TAB 指定该样式,通常的字符事件在Tab键按下时创建否则,Tab由对话框来管理,通常是控件键的切换wx.TE_READONLY 文本控件为只读,用户不能修改其中的文本。wx.TE_RIGHT 控件中的文本右对齐#例子:
import wx
class Frame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, wx.ID_ANY,"登陆", size =(300, 300))panel = wx.Panel(self, -1)wx.StaticText(panel, wx.ID_ANY, "登录界面", (0, 10),(150, -1),wx.ALIGN_RIGHT)text = wx.StaticText(panel, wx.ID_ANY, "账户", (0, 50),(80, -1),wx.ALIGN_RIGHT)text = wx.StaticText(panel, wx.ID_ANY, "密码", (0, 90),(80, -1),wx.ALIGN_RIGHT)text = wx.TextCtrl(panel, wx.ID_ANY, "", (100,50),(100, 20),wx.ALIGN_LEFT)text = wx.TextCtrl(panel, wx.ID_ANY, "", (100,90),(100, 20),wx.TE_PASSWORD)
if __name__ == '__main__':app = wx.App()frame = Frame()frame.Show(True)app.MainLoop()
按钮控件:
#语法:
wx.Button(parent,id,label,pos,size,style,validator,name)#例子:
import wx
class Frame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, wx.ID_ANY,"登陆", size =(300, 250))panel = wx.Panel(self, -1)wx.StaticText(panel, wx.ID_ANY, "登录界面", (0, 10),(150, -1),wx.ALIGN_RIGHT)self.text = wx.StaticText(panel, wx.ID_ANY, "账户", (0, 50),(80, -1),wx.ALIGN_RIGHT)self.text = wx.StaticText(panel, wx.ID_ANY, "密码", (0, 90),(80, -1),wx.ALIGN_RIGHT)self.text = wx.TextCtrl(panel, wx.ID_ANY, "", (100,50),(100, 20),wx.ALIGN_LEFT)self.text = wx.TextCtrl(panel, wx.ID_ANY, "", (100,90), (100, 20), wx.ALIGN_LEFT)self.button = wx.Button(panel, wx.ID_ANY, "登陆", (70,120),(50, 20),wx.ALIGN_LEFT)self.button = wx.Button(panel, wx.ID_ANY, "注册", (140,120), (50, 20), wx.ALIGN_LEFT)
if __name__ == '__main__':app = wx.App()frame = Frame()frame.Show(True)app.MainLoop()
复选框控件:
import wx
class Frame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, wx.ID_ANY,"复选框", size =(300, 250))panel = wx.Panel(self, -1)self.box = wx.CheckBox(panel, -1, "Checkbox1", pos=(50, 50), size=(80, 20)) # 创建控件self.box = wx.CheckBox(panel, -1, "Checkbox2", pos=(50, 70), size=(80, 20)) # 创建控件self.box = wx.CheckBox(panel, -1, "Checkbox3", pos=(50, 90), size=(80, 20)) # 创建控件
if __name__ == '__main__':app = wx.App()frame = Frame()frame.Show(True)app.MainLoop()
单选框控件:
import wx
class MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, -1, "选择一种喜欢的运动方式", size=(300, 100))panel = wx.Panel(self)wx.StaticText(panel, wx.ID_ANY, "选择一种喜欢的运动方式", (0, 10), (200, -1), wx.ALIGN_RIGHT)self.check1 = wx.RadioButton(panel, -1, "打篮球", pos=(60, 40), size=(50, 20), style=wx.RB_GROUP)self.check2 = wx.RadioButton(panel, -1, "打乒乓球", pos=(130, 40), size=(50, 20))self.check3 = wx.RadioButton(panel, -1, "跑步", pos=(200, 40), size=(50, 20))
if __name__ == "__main__":app = wx.App()frame = MyFrame()frame.Show()app.MainLoop(
布局方法:
绝对布局:
固定位置,窗口大小变化,不会影响控件的位置
Sizer管理布局:
分类:Sizer、WrapSizer、BoxSizer、GridSizer、FlexGridSizer、GridBagSizer和 StaticBoxSzer、StdDialogButtonSizer
BoxSizer布局:
BoxSizer布局排布方式垂直或水平,一般是在创建的时候指定布局的方向
my_box = wx.BoxSizer(wx.HORIZINTAL) #水平布局,括号为空默认是水平布局
My_box = wx.BoxSizer(wx.VERTICAL) #垂直布局#添加控件:
Add(parent,proportion=0,flag=0,border=0,userData=None)#添加到父窗口
Add(AnotherSizer,proportion=0,flag=0,border=0,userData=None)#添加到另一个布局,创建了新的空间
Add(AnotherSizer,proportion=0,flag=0,border=0,userData=None)
flag:
flag:对齐、边框和尺寸参数
对齐标志 | 作用 |
ALIGN_TOP | 顶对齐 |
wx.ALIGN_LEFT | 左对齐 |
wx.ALIGN_BOTTOM | 底对齐 |
wx.ALIGN_RIGHT | 右对齐 |
wx.ALIGN_CENTER | 居中对齐 |
wx.ALIGN_CENTER_VERTIAL | 垂直居中对齐 |
wx.ALIGN_CENTER_HORIZONTAL | 水平居中对齐 |
边框标志 | 作用 |
wx.TOP | 设置有顶部边框,边框的宽度需要通过Add()方法的border参数设置 |
wx.BOTTOM | 设置有底部边框 |
wx.LEFT | 设置有左边框 |
wx.RIGHT | 设置有右边框 |
wx.ALL | 设置4面全有边框 |
尺寸标志 | 作用 |
wx.EXPAND | 调整子窗口(或控件)完全填满有效空间 |
wx.SHAPED | 调整子窗口(或控件)填充有效空间,但保存高宽比 |
wx.FIXED_MINSIZE | 调整子窗口(或控件)为最小尺寸 |
wx.RESERVE_SPACE_EVEN_IF_HIDDEN | 设置此标志后,子窗口(或控件)如果被隐藏,所占空间保留 |
#例子:
import wx
class MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, -1, "登录界面", size=(300, 300))panel = wx.Panel(self)#创建一个画布,然后创建功能区并放到画布上self.title = wx.StaticText(panel,label = '登陆界面')self.username = wx.StaticText(panel,label = '用户:')self.user_name = wx.TextCtrl(panel,style = wx.TE_LEFT)self.userpassword = wx.StaticText(panel,label = '密码:')self.user_password = wx.TextCtrl(panel,style = wx.TE_PASSWORD)self.button_login = wx.Button(panel,label = '登陆')self.button_register = wx.Button(panel,label = '注册')container_one = wx.BoxSizer(wx.HORIZONTAL) # 创建一个box容器并控制水平排列container_one.Add(self.username,proportion = 0,flag = wx.ALL,border = 7)container_one.Add(self.user_name,proportion = 1,flag = wx.ALL,border = 7)container_two = wx.BoxSizer(wx.HORIZONTAL) # 创建一个box容器并控制水平排列container_two.Add(self.userpassword,proportion = 0,flag = wx.ALL,border = 7)container_two.Add(self.user_password,proportion = 1,flag = wx.ALL,border = 7)container_three = wx.BoxSizer(wx.HORIZONTAL) # 创建一个box容器并控制水平排列container_three.Add(self.button_login,proportion = 0,flag = wx.ALIGN_CENTER,border = 4)container_three.Add(self.button_register,proportion =0,flag = wx.ALIGN_CENTER,border = 4)sizers = wx.BoxSizer(wx.VERTICAL) sizers.Add(self.title,proportion=0,flag=wx.BOTTOM|wx.TOP|wx.ALIGN_CENTER,border=10)sizers.Add(container_one,proportion = 0,flag =wx.EXPAND|wx.LEFT|wx.RIGHT,border=40)sizers.Add(container_two, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=40)sizers.Add(container_three, proportion=0, flag=wx.ALIGN_CENTER|wx.TOP, border=10)panel.SetSizer(sizers)
if __name__ == "__main__":app = wx.App()frame = MyFrame()frame.Show()app.MainLoop()
事件管理:
事件:用户执行的动作,分为点击和松开
#事件绑定:
Button_login.Bind(wx.EVT_BUTTON,OnclickEventName)wx.EVT_BUTTON 事件类型选择了按钮类型OnclickEventName 点击按钮时执行的方法名#例子:
import wx
class MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, -1, "登录界面", size=(300, 300))panel = wx.Panel(self)#创建一个画布,然后创建功能区并放到画布上self.title = wx.StaticText(panel,label = '登陆界面')self.username = wx.StaticText(panel,label = '用户:')self.user_name = wx.TextCtrl(panel,style = wx.TE_LEFT)self.userpassword = wx.StaticText(panel,label = '密码:')self.user_password = wx.TextCtrl(panel,style = wx.TE_PASSWORD)self.button_login = wx.Button(panel,label = '登陆')self.button_login.Bind(wx.EVT_BUTTON,self.OnclickEventname)...和上一节一致,在这里省略....def OnclickEventname(self,event):ms = ''urnm = self.user_name.GetValue()pwd = self.user_password.GetValue()if urnm == '' or pwd == '':ms = '用户或密码不能为空'elif urnm == 'qy' and pwd == '123456':ms = '登陆成功'else:ms = '用户或密码错误'wx.MessageBox(ms)
if __name__ == "__main__":app = wx.App()frame = MyFrame()frame.Show()app.MainLoop()
下拉菜单:
#
wx.ComboBox 文本框,选择框内容不固定的
wx.Choice 选择框内容固定的select_one = wx.ComboBox(panel, -1, value='足球', choices=sports, style=wx.CB_SORT)
select_two = wx.Choice(panel, -1, choices=phones, style=wx.CB_SORT)import wx
class MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, -1, "下拉列表", size=(300, 300))self.Centre()panel = wx.Panel(self)#创建一个容器box_one = wx.BoxSizer(wx.HORIZONTAL)text_one = wx.StaticText(panel,label='你喜欢的运动为:')sports = ['篮球','足球','排球']select_one = wx.ComboBox(panel,-1,value = '足球',choices = sports,style = wx.CB_SORT)box_one.Add(text_one,1,flag=wx.LEFT|wx.RIGHT|wx.FIXED_MINSIZE,border = 7)box_one.Add(select_one,1,flag = wx.ALL|wx.FIXED_MINSIZE)box_two = wx.BoxSizer(wx.HORIZONTAL)text_two = wx.StaticText(panel,label='你喜欢的手机品牌为:')phones = ['小米','华为','苹果']select_two = wx.Choice(panel,-1,choices = phones,style = wx.CB_SORT)box_two.Add(text_two,1,flag=wx.LEFT|wx.RIGHT|wx.FIXED_MINSIZE,border = 7)box_two.Add(select_two,1,flag = wx.ALL|wx.FIXED_MINSIZE)bbox = wx.BoxSizer(wx.VERTICAL)bbox.Add(box_one,1,flag = wx.ALL|wx.EXPAND,border = 7)bbox.Add(box_two, 1, flag=wx.ALL | wx.EXPAND, border=7)panel.SetSizer(bbox)
if __name__ == "__main__":app = wx.App()frame = MyFrame()frame.Show()app.MainLoop()
菜单:
menuBar = wx.MenuBar() 创建一个菜单栏
fileMenu = wx.Menu() 创建菜单
newItem = wx.MenuItem() 创建菜单项
fileMenu.AppendItem(newItem) 添加菜单项到菜单中
menuBar.Append(fileMenu, title = "File")添加菜单到菜单栏
self.SetMenuBar(menuBar) 把菜单栏设置为界面的菜单栏
self.Bind(wx.EVT_MENT, self.menuHandler)绑定菜单事件#例子:
import wx
class MyFrame(wx.Frame):def __init__(self):super().__init__(parent=None, title="wxPython", size=(400, 300))self.Center()self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE)vbox = wx.BoxSizer(wx.VERTICAL)self.SetSizer(vbox)vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1)menubar = wx.MenuBar()#对应步骤1self.SetMenuBar(menubar)file_menu = wx.Menu()#对应步骤2menubar.Append(file_menu, '菜单')#对应步骤4file_menu.Append(id=wx.ID_NEW, item='新建', helpString='new file')file_menu.AppendSeparator()edit_menu = wx.Menu()file_menu.AppendSubMenu(edit_menu, "编辑")copy_item = wx.MenuItem(edit_menu, 100, text="复制", kind=wx.ITEM_NORMAL)#对应步骤3edit_menu.Append(copy_item)cut_item = wx.MenuItem(edit_menu, 101, text="剪切", kind=wx.ITEM_NORMAL)edit_menu.Append(cut_item)paste_item = wx.MenuItem(edit_menu, 102, text="粘贴", kind=wx.ITEM_NORMAL)edit_menu.Append(paste_item)
if __name__ == "__main__":app = wx.App()frame = MyFrame()frame.Show()app.MainLoop()
python学习笔记之操作文件,模块使用相关推荐
- Python学习笔记:常用第三方模块(1)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用内建模块7XML
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用内建模块2:collections
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记D9(文件)
Python学习笔记D9(文件) 文件 1.打开文件 open(file, mode='r') 接收两个参数:文件名(file)和模式(mode),用于打开一个文件,并返回文件对象,如果该文件无法被打 ...
- Python学习笔记:常用第三方模块3
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用内建模块5
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- 深度之眼 - Python学习笔记——第八章 文件、异常和模块
第八章 文件.异常和模块 实际应用中,我们绝大多数的数据都是通过文件的交互完成的 8.1 文件的读写 8.1.1 文件的打开 文件的打开通用格式 with open("文件路径", ...
- Python学习笔记三(文件操作、函数)
一.文件处理 1.文件打开模式 打开文本的模式,默认添加t,需根据写入或读取编码情况添加encoding参数. r 只读模式,默认模式,文件必须存在,不能存在则报异常. w 只写模式,若文件不存 ...
- Python学习笔记九:文件I/O
打印到屏幕: 1 #!/usr/bin/python 2 3 print "Python is really a great language,", "isn't it? ...
最新文章
- ASP.NET ASHX中获得Session
- 第16天:函数的定义和调用
- SBO业务单据类型(总结)
- linux查看crontab服务执行日志
- 动手开发一个简易的 PHP for Git Server 第一章
- Hadoop--初识Hadoop
- 关闭打开苹果电脑Rootless机制
- 苹果高管谈论iPhone 12影像功能:硬件和软件的整体结合
- Android 内核的开发“顽疾”如何解决?
- 【BLE蓝牙学习开发笔记】安利一款简单好用且高性价比的BLE蓝牙抓包器
- python写剧情文字游戏_零基础学Python——制作简单文字游戏
- WERTYU UVA - 10082
- 端傳媒 android客户端,知乎安卓客户端交互设计分析!
- 工程职业伦理(2018年秋)学堂在线习题
- 浅谈道路交通事故车辆安全技术鉴定
- android 常用机型尺寸_Android中获取手机屏幕大小的方法
- 华为OD机试真题 Python 实现【机器人】【100%通过率】【2022.11 Q4 新题】
- 【安全测试】安全测试浅析
- excel 扩展插件:方方格子(一键将小写字母转为大写)
- 运放的几个应用:精密整流电路、理想二极管
热门文章
- PING请求超时原因及解决办法(新增PING间歇性显示请求超时)
- 大学python教材课后答案_大学慕课2020年用Python玩转数据课后答案
- GPS/RTK高精度定位系统有什么优势?
- 在USA使用交行信用卡的感受
- mysql2000名称_[转载]编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数...
- 帆软公式如何用数据库字段_如何用WORD书写三角函数公式?如何快速记忆诱导公式?...
- 事关中国!北约正酝酿一个大调整
- js 中 try catch用法
- #linux-- find: paths must precede expression
- Java岗:2022最新版的Java面试突击班手册,大厂面试轻松拿捏住!