python tkinter开发问题记录
记录一些自己使用tkinter中遇到的问题以及处理,记录不熟悉的api等等.
持续记录…
窗口相关
窗口大小以及居中显示
import tkinter
window = tkinter.Tk()
# 得到屏幕宽度
sw = window.winfo_screenwidth()
# 得到屏幕高度
sh = window.winfo_screenheight()
# 窗口宽高
ww = 800
wh = 600
x = (sw - ww) / 2
# 垂直居中 /2 即可
y = (sh - wh) / 4
# 设置窗口大小以及位置 此处通过计算居中显示
window.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
图标相关
设置图标
root = tkinter.Tk()
root_ui = MainUI(root)
root.iconbitmap("icon.ico")
root.mainloop()
图标打包
编写脚本 topyico.py
import base64
open_icon = open("icon.ico", "rb") # icon.icon为你要放入的图标
b64str = base64.b64encode(open_icon.read()) # 以base64的格式读出
open_icon.close()
write_data = "img=%s" % b64str
f = open("icon.py", "w+") # 将上面读出的数据写入到icon.py的img数组中
f.write(write_data)
f.close()
设置图标
#原理:通过第一步使用base64把原图标 icon.ico转成py文件保存
# 在窗口初始化时,使用base64把 icon.py 文件内容 写入 icon.ico 生成临时图标
# 通过root.iconbitmap("icon.ico") 设置图标后,删除本地临时图标 icon.ico
# 这样做的好处是 通过pyinstaller打包时 可以把icon.py打入exe
from icon import img
root = tkinter.Tk()
root_ui = MainUI(root)
root_ui.init_window()
# 设置窗口图标
tmp = open("icon.ico", "wb+")
tmp.write(base64.b64decode(img)) # 写入到临时文件中
tmp.close()
root.iconbitmap("icon.ico")
os.remove("icon.ico")
root.mainloop()
文件相关
选择文件
from tkinter import filedialog
path = filedialog.askopenfilename(title='选择文件',
filetypes=[('图片', '.jpg'),
('图片', '.bmp'),
('图片', '.png'),
('图片', '.jpeg')])
OS操作
# 显示当前使用的平台,'nt'表示Windows,'posix' 表示Linux
os.name
# 返回当前进程的工作目录
os.getcwd()
# 描述:列出目录下的所有文件和文件夹
os.listdir()
# 描述:命名文件或目录,能对相应的文件进行重命名
os.rename()
# 描述:返回文件的绝对路径
os.path.abspath(path)
# 描述:返回文件名包含后缀,纯粹字符串处理逻辑,路径错误也可以
os.path.basename(path)
# 描述:返回文件路径
os.path.dirname(path)
# 描述:把path中包含的""和"user"转换成用户目录
os.path.expanduser(path)
# 描述:把目录和文件名合成一个路径
# 1.如果各组件名首字母不包含’/’,则函数会自动加上
# 2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
# 3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
os.path.join(path1[, path2[, ...]])
# 描述:转换path的大小写和斜杠
os.path.normcase(path)
# 描述:规范path字符串形式
os.path.normpath(path)
# 描述:把路径分割成 dirname 和 basename,返回一个元组
os.path.split(path)
# 描述:遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数
os.path.walk(path, visit, arg)
#穷举遍历一个文件夹里面的所有文件,并获取文件的目录名
abs_cur_dir ='xxx'
file_url=[]
for dirs,folders,files in os.walk(abs_cur_dir):
for i in files:
file_url.append(os.path.join(dirs,i))
print(file_url)
调用系统接口问题
调用os.system()出现cmd窗口问题
解决方法:使用subprocess替代
#举例:调用系统接口 打开文件目录并选中文件
from subprocess import run
# os.system(f'explorer /select, {real_path}')
command = f'explorer /select, {real_path}'
run(command, shell=True)