机器学习Tools

快速进展条工具库tqdm

用 tqdm(iterable)包装任何 iterable, 让循环显示一个智能进度条。
 

tqdm 是一个 Python 快速、可扩展的进度条工具库,它有很多优点:

  • 易于使用:只需在 Python 循环中包裹你的迭代器,一行代码就能产生一个精美的进度条。
  • 灵活:它可以和 for 循环、pandas dataframe的 apply 函数以及 Python 的 map 函数等等配合使用。
  • 高效:tqdm 使用了智能算法,即使在数据流非常快的情况下,也不会拖慢你的代码速度。
     

iterable=None,可迭代对象。
desc=None,传入str类型,作为进度条标题。
total=None,预期的迭代次数。一般不填,默认为iterable的长度。
leave=True,迭代结束时,是否保留最终的进度条。默认保留。
file=None,输出指向位置,默认是终端,一般不需要设置。
ncols=None,可以自定义进度条的总长度。
unit,描述处理项目的文字,默认’it’,即100it/s;处理照片设置为’img’,则为100img/s。
postfix,以字典形式传入详细信息,将显示在进度条中。
unit_scale,自动根据国际标准进行项目处理速度单位的换算。
 

循环过程中输出额外内容

.set_postfix方法

with trange(100, desc='Test') as tbar:
    for i in range(100):
        tbar.set_postfix(loss=i/100, x=i)
        tbar.update()
        time.sleep(0.2)

.write方法

for i in tqdm(range(5), desc='Test'):
    tqdm.write('loss={},x={}'.format(i/100, i))
    time.sleep(0.5)

需使用终端运行代码,其他方法会出现格式问题。

pycharm命令终端中,使用cd命令切换到python文件所在的目录。使用 python XX.py  运行所需文件。

 

if __name__ == "__main__"

Python程序的两种执行方式:作为主程序运行和作为模块导入运行。
if __name__ == "__main__"的作用是在不同的执行方式下执行不同的代码块。
具体来说,它允许指定哪些代码应仅在脚本作为主程序运行时执行,而不应在脚本被导入为模块时执行。这是通过检查__name__变量的值来实现的。
 

作为主程序运行

当一个Python脚本被直接执行时,它被视为主程序。这是通过在终端或命令提示符中运行脚本文件来实现的。主程序通常包含了脚本的入口点和执行逻辑。
__name__变量的值是"__main__"。因此,if __name__ == "__main__"下的代码块将被执行,使脚本能够独立运行并执行特定任务。
 

作为模块导入运行

Python的一个强大之处是模块化编程。可以将一个Python脚本编写成一个模块,然后在其他脚本中导入并重复使用。当脚本被导入为模块时,Python解释器会执行模块中的代码,但不会执行模块的主程序逻辑。
__name__变量的值不是"__main__",而是模块的名称。因此,if __name__ == "__main__"下的代码块不会被执行,从而避免不必要的操作。这使得脚本的功能可以在其他程序中重复利用。

功用

1 完成模块初始化。

2.测试和调试,在许多项目中,会编写用于测试和调试的代码。这些代码通常不应在模块被导入时执行。

GUI编程(tkinter)

Button按钮控件;在程序中显示按钮。
Canvas画布控件;显示图形元素如线条或文本
Checkbutton多选框控件;用于在程序中提供多项选择框
Entry输入控件;用于显示简单的文本内容
Frame框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label标签控件;可以显示文本和位图
Listbox列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton菜单按钮控件,用于显示菜单项。
Menu菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message消息控件;用来显示多行文本,与label比较类似
Radiobutton单选按钮控件;显示一个单选的按钮状态
Scale范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text文本控件;用于显示多行文本
Toplevel容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox输入控件;与Entry类似,但是可以指定输入范围值
PanedWindowPanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFramelabelframe 是一个简单的容器控件。常用于复杂的窗口布局。
tkMessageBox

用于显示你应用程序的消息框。

tkinter的坐标系与颜色格式

以左上角为起点,x轴向右延伸,y轴向下延伸。在窗口中,容器的左上角是(0, 0),不包括窗口的标题栏和菜单栏。

两种表示颜色的方式:一种是颜色的名称,比如"green", "brown";另一种是颜色的十六进制形式,比如"#00ffff"。
tkinter不支持颜色RGB元组形式,不过可以把它转换成十六进制形式。

这种十六进制形式相当于:"#"+R的十六进制+G的十六进制+B的十六进制。
比如(255, 255, 255)是纯白,转换成十六进制形式就变成了#ffffff。

tkinter也有一种特殊的颜色名称,叫做SystemButtonFace,是一种浅灰色,是组件的默认背景颜色。

创建主窗口

import tkinter as tk

#创建一个窗口,因为后面还要用到所以用window这个变量来赋值,可以自行更改
window = tk.Tk()

#必须一直更新窗口,不然会未响应,如果要自行更新,可以用window.update()
window.mainloop()

修改窗口标题  (注意:一定要加双引号哦~)

window.title("第一个tkinter小程序")

调整窗口大小和尺寸(注意:一定要加双引号,X坐标和Y坐标选填)
geometry(“窗口宽度x窗口高度+X坐标+Y坐标”)

window.geometry("750x200+-10+0")

锁定窗口大小
参数一:x轴,参数二:y轴。

# 锁定宽度
window.resizable(False, True)

# 锁定高度
window.resizable(True, False)

# 锁定全部
window.resizable(False, False)

设置标题栏图标

window.iconbitmap(False, "icon.ico")

(记得转换成ico格式,下载下来的还是png格式,记得转换为ico格式)如果default为True,这也将应用于将来创建的所有顶级。

window.iconphoto(True, tkinter.PhotoImage(file = 'hometown.png'))

Label 标签控件

创建label

# 指定master,即摆放组件的父容器
lab = tk.Label(window, text='你好!this is Tkinter', bg='green', font=('Arial', 12), width=30, height=2)

# 将定义的Label摆放到父容器上面。所有的组件都需要在定义后摆放到窗口上,不然无法显示
lab.pack()

设置边框样式
默认flat, 可选:sunken, raised, groove, riged, solid

lab = tk.Label(window, text='你好!this is Tkinter', relief="solid")
lab.pack()

设置鼠标移动到组件上的样式

import tkinter as tk

# 所有的光标样式
cursorList = ['arrow', 'xterm', 'watch', 'hand2', 'question_arrow', 'sb_h_double_arrow',
              'sb_v_double_arrow', 'fleur','crosshair', 'based_arrow_down', 'based_arrow_up',
              'boat', 'bogosity', 'top_left_corner','top_right_corner', 'bottom_left_corner',
              'bottom_right_corner', 'top_side', 'bottom_side', 'top_tee','bottom_tee',
              'box_spiral', 'center_ptr', 'circle', 'clock', 'coffee_mug', 'cross', 'cross_reverse',
              'diamond_cross', 'dot', 'dotbox', 'double_arrow', 'top_left_arrow', 'draft_small',
              'draft_large','left_ptr', 'right_ptr', 'draped_box', 'exchange', 'gobbler',
              'gumby', 'hand1', 'heart', 'icon','iron_cross', 'left_side', 'right_side',
              'left_tee', 'right_tee', 'leftbutton', 'middlebutton','rightbutton', 'll_angle',
              'lr_angle', 'man', 'mouse', 'pencil', 'pirate', 'plus', 'rtl_logo', 'sailboat',
              'sb_left_arrow', 'sb_right_arrow', 'sb_up_arrow', 'sb_down_arrow', 'shuttle',
              'sizing', 'spider','spraycan', 'star', 'target', 'tcross', 'trek', 'ul_angle',
              'umbrella', 'ur_angle', 'X_cursor']

# 创建一个窗口,因为后面还要用到所以用window这个变量来赋值,可以自行更改
window = tk.Tk()

window.title("我的第一个tkinter小程序")
window.geometry("550x550+-10+0")

for i in range(len(cursorList)):
    cursor = cursorList[i]

    tk.Label(window,text=cursor, cursor=cursor, relief="groove").grid(
        column=i // 20, row=i % 20, sticky="we")  # 后面会讲到grid,是一种排放组件方式

# 必须一直更新窗口,不然会未响应,如果要自行更新,可以用window.update()
window.mainloop()

设置文本字体

lab = tk.Label(window, text='叠加使用', font=("黑体", 20, "bold", "italic", "underline", "overstrike"), 
               relief="solid", cursor="star")
lab.pack()

添加内置图标

import tkinter as tk

# 创建一个窗口,因为后面还要用到所以用window这个变量来赋值,可以自行更改
window = tk.Tk()

window.title("我的第一个tkinter小程序")
window.geometry("550x550+-10+0")

bitmaps = ["error", "info", "hourglass", "questhead", "question", "warning",
           "gray12", "gray25", "gray50", "gray75"]

for bitmap in bitmaps:
    tk.Label(window, text=bitmap, bitmap=bitmap, compound="left").pack()

# 必须一直更新窗口,不然会未响应,如果要自行更新,可以用window.update()
window.mainloop()

添加图片
这个图片是一个tk.PhotoImage对象,支持的格式只有*.gif, *.ppm, *.pgm,较新版的tk支持显示*.png。
在使用tkinter.PhotoImage的时候,需要指定file="文件名"这个关键字参数。
要保证储存PhotoImage图片对象变量不会被Python垃圾回收机制删除(这意味着不能设置成局部变量),否则图片无法正确显示。

image = tkinter.PhotoImage(file="图片名称")

tk.Label(root, image=image, text="It's a monster.", compound="top").pack()

如果想要显示更多的图片文件格式,比如*.jpg该怎么办呢?这时候需要使用pillow工具。这是一个第三方模块,需要用pip安装:pip install pillow,导入时import PIL。

from PIL import Image, ImageTk

image = ImageTk.PhotoImage(Image.open("monster.png"))

tkinter也有一些内部的图片,可以通过字符串传递给image。
包括:"::tk::icons::error","::tk::icons::information","::tk::icons::question","::tk::icons::warning"。

import tkinter as tk

window = tk.Tk()

window.title("我的第一个tkinter小程序")
window.geometry("550x550+-10+0")

for image in ["::tk::icons::error",
              "::tk::icons::information",
              "::tk::icons::question",
              "::tk::icons::warning"]:
    tk.Label(window, text=image, image=image, compound="left").pack()

window.mainloop()

显示变量
kinter提供了一些变量对象,可以绑定到组件,可以设置它们的值。绑定的组件会随着设置而刷新。这些对象有StringVar()文本变量,IntVar()整数变量,DoubleVar()浮点数变量,BooleanVar()布尔值变量。

import tkinter as tk

window = tk.Tk()

window.title("我的第一个tkinter小程序")
window.geometry("550x550+-10+0")

var = tk.StringVar()

lab = tk.Label(window, textvariable=var, relief="groove", 
               font=("黑体", 20, "bold", "italic", "underline", "overstrike"))
lab.pack()

# 设置变量的值
var.set('1234')
# 获取变量的值
sth = var.get()
print(sth)

window.mainloop()

Bution 按钮控件

Button的参数和Label基本类似,也支持text, image, bitmap等功能。Button也有relief,按钮默认的relief是raised。与Label最不同的是,它还可以绑定一个点击事件。

import tkinter as tk

window = tk.Tk()
window.title("我的第一个tkinter小程序")
window.geometry("550x550+-10+0")

def helloCallBack():
   print("你点了一下按钮")

B = tk.Button(window, text ="点我", command = helloCallBack)
B.pack()

window.mainloop()

如果鼠标长按按钮,那么按钮不会被触发,而是松开鼠标后触发。这时候,按钮处于一种激活状态。
设置激活时按钮的前景和背景颜色:

B = tk.Button(window, text ="点我", activeforeground="blue", activebackground="yellow")

设置连续触发
按在按钮上,经过repeatdelay毫秒的延迟后,按钮将会重复触发,每次触发的间隔是repeatinterval毫秒。

B = tk.Button(window, text ="点我", command = helloCallBack,
              activeforeground="blue", activebackground="yellow",
              repeatdelay=1000, repeatinterval=500)

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值