Tkinter,一个轻量级的Python GUI库

欢迎关注作者微信公众号:愤怒的it男

Tkinter(即 tk interface,简称“Tk”)本质上是对Tcl/Tk软件包的Python接口封装,属于Python自带的标准库,安装好Python后可以直接使用Tkinter库而无须另行安装。Tkinter库作为Python GUI开发工具之一,具备GUI库的常用功能,可以说“麻雀虽小,五脏俱全”。当您想要制作一个简单的桌面应用程序或者小工具的界面时,Tkinter库绝对是一个最佳的选择。

本篇文章将对常见的18种控件做一个简单概述和实践编程,均配有实例源码可直接运行研究,如果需要更加深入全面学习,可以参考以下网站:

1、https://c.biancheng.net/tkinter/

2、https://docs.python.org/zh-cn/3/library/tkinter.html

下表列出了Tkinter中常用的18种控件:

一、Tk主窗体

我们要学习使用上面提到的这些控件首先要创建一个主窗口,就像作画一样,先要架好架子和画板,然后才能在上面放画纸和各种绘画元素,创建好主窗口才能在上面放置各种控件元素。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')
window.mainloop()

二、Label控件

Label是Tkinter中最常使用的一种控件,主要用来显示窗口中的文本或者图像,并且不同的Lable允许设置各自不同的背景图片。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

image = tk.PhotoImage(file='image.png')
label_image = tk.Label(window, image=image, width=150, height=150, borderwidth=1, relief='solid')
txt = '微信公众号:愤怒的it男'
label_text = tk.Label(window, text=txt, font=('宋体',10,'bold'), padx=15, pady=15, borderwidth=1, relief='solid')
label_image.pack(side='left', padx=30)
label_text.pack(side='right', padx=30)

window.mainloop()

三、Message控件

Message控件与Label控件的功能类似,它主要用来显示多行不可编辑的文本信息,与Label的不同之处在于该控件增加了自动分行的功能。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

txt = '''微信公众号:愤怒的it男\n\n大家好,我是愤怒的it男,我正在学习Python的Tkinter,这是一个轻量级的GUI库,特别适合本人写一些需要界面的小工具,简单易入门,功能还很强大……'''
message = tk.Message(window, text=txt, font=('宋体',10,'bold'), width=450, bg='#FFFFFF', padx=20, pady=20)
message.pack(fill='both')

window.mainloop()

四、Button控件

Button是Tkinter中常用的窗口部件之一,同时也是实现程序与用户交互的主要控件。按钮控件使用起来非常简单,它同样可以包含文本、图像、位图,并通过command参数回调函数。

import tkinter as tk
from tkinter import messagebox

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def click_button():
	txt = '微信公众号:愤怒的it男'
	messagebox.showinfo(title='温馨提示', message=txt)

button = tk.Button(window, text='查看', font=('宋体',10,'bold'), width=8, height=1, command=click_button)
button.pack()

window.mainloop()

五、Entry控件

Entry是tkinter类中提供的的一个单行文本输入域,用来输入显示一行文本。比如网页登录,搜索输入等时候都可以用到。

import tkinter as tk
from tkinter import messagebox

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

username = tk.StringVar()
password = tk.StringVar()
def login():
    if str(username.get())=='愤怒的it男' and str(password.get())=='angry_it_man':
        txt = '微信公众号:愤怒的it男'
        messagebox.showinfo(title='登录成功', message=txt)
    else:
        txt = '登陆失败'
        messagebox.showinfo(title='登陆失败', message=txt)

entry_username = tk.Entry (window, textvariable=username)
entry_password = tk.Entry (window, textvariable=password, show='*')
button = tk.Button(window, text='登录', font=('宋体',10,'bold'), width=8, height=1, command=login)

entry_username.pack(pady=10)
entry_password.pack(pady=10)
button.pack(pady=10)

window.mainloop()

六、Spinbox控件

Spinbox是Entry控件的升级版,它是Tkinter 8.4版本后新增的控件,该控件不仅允许用户直接输入内容,还支持用户使用微调选择器(即上下按钮调节器)来输入内容。在一般情况下,Spinbox控件用于在固定的范围内选取一个值的时候使用。

import tkinter as tk
from tkinter import messagebox

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

num1 = tk.StringVar()
num2 = tk.StringVar()
def calc():
    txt = '相加结果:' + str(int(num1.get()) + int(num2.get()))
    messagebox.showinfo(title='温馨提示', message=txt)

spinbox_num1 = tk.Spinbox(window, from_=0, to=10, textvariable=num1)
spinbox_num2 = tk.Spinbox(window, from_=0, to=10, textvariable=num2)
button = tk.Button(window, text='相加', font=('宋体',10,'bold'), width=8, height=1, command=calc)

spinbox_num1.pack(pady=10)
spinbox_num2.pack(pady=10)
button.pack(pady=10)

window.mainloop()

七、Text控件

Text 文本控件是Tkinter中经常使用的控件,与Entry控件相比,Text控件用于显示和编辑多行文本,而Entry控件则适合处理单行文本。Text允许用户以不同的样式、属性来显示和编辑文本,它可以包含纯文本或者格式化文本,同时支持嵌入图片、显示超链接以及带有CSS格式的HTML等。

import tkinter as tk
from tkinter import messagebox

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def save():
    messagebox.showinfo(title='温馨提示', message=text.get('1.0', tk.END))

text = tk.Text(window, height=15)
button = tk.Button(window, text='保存', font=('宋体',10,'bold'), width=8, height=1, command=save)

text.pack()
button.pack(pady=10)

window.mainloop()

八、Listbox控件

Listbox是tkinter类中提供的的列表框部件,显示供选方案的一个列表。Listbox中的选项可以是多个条目,也可以是单个唯一条目,但常用于多个条目。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def on_select(event):
	value = listbox.get(listbox.curselection())
	txt.set(value)

list = tk.StringVar()
list.set(('Python','JavaSript','PHP','C/C++','Java','Lua','Erlang'))
listbox = tk.Listbox(window, listvariable=list)
listbox.bind('<<ListboxSelect>>', on_select)
txt = tk.StringVar()
label = tk.Label(window, textvariable=txt, font=('宋体',10,'bold'), width=15, padx=15, pady=15, borderwidth=1, relief='solid')
listbox.pack(side='left', padx=30)
label.pack(side='right', padx=30)

window.mainloop()

九、Combobox控件

Listbox是一个供用户从列表项中选择相应条目的控件。但在有些情况下,比如列表的项目过多时,若使用列表控件,列出所有选项就会显得界面格外臃肿,这时就需要用到Combobox控件,也就是下拉式控件,该控件是Listbox控件的改进版,具有更加灵活的界面,因此其应用场景相比于前者要更加广泛。

import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def on_select(event):
	value = combobox.get()
	txt.set(value)

list = ['Python','JavaSript','PHP','C/C++','Java','Lua','Erlang']
combobox = ttk.Combobox(window, values=list)
combobox.bind('<<ComboboxSelected>>', on_select)
txt = tk.StringVar()
label = tk.Label(window, textvariable=txt, font=('宋体',10,'bold'), width=15, padx=15, pady=15, borderwidth=1, relief='solid')
combobox.pack(pady=15)
label.pack(pady=15)

window.mainloop()

十、Radiobutton控件

Radiobutton同样允许用户选择具体的选项值,不过与Listbox相比,Radiobutton仅允许用户选择单一的选项值,各个选项值之间是互斥的关系,因此只有一个选项可以被用户选择。Radiobutton通常都是成组出现的,所有Radiobutton都使用相同的变量。Radiobutton可以包含文本或图像,每一个Radiobutton都可以与一个Python函数相关联。当按钮被按下时,对应的函数会被执行。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def select():
	value = '您选择了' + language[v.get()] + '语言!'
	txt.set(value)

language = ['Python','JavaSript','PHP','C/C++','Java','Lua']
v = tk.IntVar()
for num,name in enumerate(language):
	radiobutton = tk.Radiobutton(window, text=name, variable=v, value=num, command=select)
	radiobutton.pack(anchor='w')

txt = tk.StringVar()
txt.set('您没有选择任何语言!')
label = tk.Label(window, textvariable=txt, font=('宋体',10,'bold'), width=25, padx=15, pady=15, borderwidth=1, relief='solid')
label.pack(pady=15)

window.mainloop()

十一、Checkbutton控件

Checkbutton控件是一种供用户选择相应条目的按钮控件,但与Radiobutton不同的是,Checkbutton控件不仅允许用户选择一项,还允许用户同时选择多项,各个选项之间属于并列的关系。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def select():
	result = ''
	for num,value in enumerate(v):
		if value.get() == 1:
			result = result + language[num] + '、'

	if result == '':
		result = '您没有选择任何语言!'
	else:
		result = '您选择了' + result[:-1] + '语言!'
	txt.set(result)
	
language = ['Python','JavaSript','PHP','C/C++','Java','Lua']
v = []
for num,name in enumerate(language):
	v.insert(num, tk.IntVar())
	checkbutton = tk.Checkbutton(window, text=name, variable=v[num], onvalue=1, offvalue=0, command=select)
	checkbutton.pack(anchor='w')

txt = tk.StringVar()
txt.set('您没有选择任何语言!')
label = tk.Label(window, textvariable=txt, font=('宋体',10,'bold'), padx=15, pady=15, borderwidth=1, relief='solid')
label.pack(pady=15)

window.mainloop()

十二、Scale控件

Scale控件,即滑块控件或标尺控件,该控件可以创建一个类似于标尺式的滑动条对象,用户通过操作它可以直接设置相应的数值(刻度值)。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def select(value):
	result = '您购买的数量是:' + value
	txt.set(result)
	
scale = tk.Scale(window, label='选择您需要购买的数量', from_=0, to=100, orient=tk.HORIZONTAL, length=400, tickinterval=10, command=select)
scale.pack(pady=15)

txt = tk.StringVar()
txt.set('您购买的数量是:0')
label = tk.Label(window, textvariable=txt, font=('宋体',10,'bold'), padx=15, pady=15, borderwidth=1, relief='solid')
label.pack(pady=15)

window.mainloop()

十三、Canvas控件

Canvas具有两个功能,首先它可以用来绘制各种图形,比如弧形、线条、椭圆形、多边形和矩形等,其次Canvas还可以用来展示文字和图片,我们将这些绘制在Canvas上的图形,称之为“画布对象”。

import tkinter as tk

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

canvas = tk.Canvas(window, bg='white')

img = tk.PhotoImage(file='image.png')
canvas.create_image(30, 60, image=img, anchor='nw')
canvas.create_text(200, 70, text='微信公众号:愤怒的it男', font=('宋体',10,'bold'), anchor='nw')
point = [(200,200),(220,190),(240,170),(260,180),(280,150),(300,140),(320,160),(340,150),(360,130)]
canvas.create_line(point, fill='purple', dash=(1,1), arrow=tk.LAST, width=3)

canvas.pack()

window.mainloop()

十四、Menu控件

Menu可以说是 GUI 中“精髓所在”,它以可视化的方式将一系列的“功能选项卡”进行分组,并在每个分组下又“隐藏”了许多其他的“选项卡”。当打开菜单时,这些选项卡就会“显式”的呈现出来,方便用户进行选择,比如Windows系统中记事本文件的界面。

import tkinter as tk
from tkinter import messagebox

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def click_menu():
	txt = '微信公众号:愤怒的it男'
	messagebox.showinfo(title='温馨提示', message=txt)

mainmenu = tk.Menu(window)

filemenu = tk.Menu(mainmenu, tearoff=False)
filemenu.add_command(label='新建', command=click_menu)
filemenu.add_command(label='打开', command=click_menu)
filemenu.add_command(label='保存', command=click_menu)
filemenu.add_separator()
filemenu.add_command(label='退出', command=click_menu)

mainmenu.add_cascade(label='文件', menu=filemenu)
mainmenu.add_command(label='编辑', command=click_menu)
window.config(menu=mainmenu)

window.mainloop()

十五、Scrollbar控件

Scrollbar控件常用于创建一个水平或者垂直的滚动条,通常情况下,Scrollbar控件可以与Listbox、Text、Canvas以及Entry等控件一起使,它主要用来控制控件区域的可见范围。

import tkinter as tk
from tkinter import messagebox

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def save():
    messagebox.showinfo(title='温馨提示', message=text.get('1.0', tk.END))

frame = tk.Frame(window)
sbar_v= tk.Scrollbar(frame, orient='vertical')
sbar_h = tk.Scrollbar(frame, orient='horizontal')
text = tk.Text(frame, height=15, wrap='none', xscrollcommand = sbar_h.set, yscrollcommand = sbar_v.set)
sbar_v.config(command =text.yview)
sbar_h.config(command = text.xview)
button = tk.Button(window, text='保存', font=('宋体',10,'bold'), width=8, height=1, command=save)

frame.pack()
sbar_h.pack(side='bottom', fill='x')
sbar_v.pack(side='right', fill='y')
text.pack()
button.pack(pady=10)

window.mainloop()

十六、filedailog控件

filedailog在GUI程序中经常的使用到,比如上传文档需要从本地选择一个文件,包括文件的打开和保存功能都需要一个文件对话框来实现。

import tkinter as tk
from tkinter import filedialog

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def callback():
    filename = filedialog.askopenfilename()
    if filename != '':
         label.config(text= filename)
    else:
         label.config(text='您没有选择任何文件')

txt = '您没有选择任何文件'
label = tk.Label(window, text=txt, font=('宋体',10), padx=7, pady=7, borderwidth=1, width=40, height=1, anchor='w', relief='solid')
button = tk.Button(window,text='选择文件', anchor='w', command=callback)

label.grid(row=0,column=0)
button.grid(row=0,column=1)

window.mainloop()

十七、colorchooser控件

colorchooser提供了一个非常友善的颜色面板,它允许用户选择自己所需要的颜色。 当用户在面板上选择一个颜色并按下“确定”按钮后,它会返回一个二元祖,其第1个元素是选择的 RGB 颜色值,第2个元素是对应的16进制颜色值。

import tkinter as tk
from tkinter import colorchooser

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def callback():
    colorvalue = colorchooser.askcolor()
    label.config(text='颜色值:'+ str(colorvalue))

txt = '您没有选择任何颜色'
label = tk.Label(window, text=txt, font=('宋体',10), padx=7, pady=7, borderwidth=1, width=40, height=1, anchor='w', relief='solid')
button = tk.Button(window,text='选择颜色', anchor='w', command=callback)

label.grid(row=0,column=0)
button.grid(row=0,column=1)

window.mainloop()

十八、messagebox控件

消息对话框主要起到信息提示、警告、说明、询问等作用,通常配合“事件函数”一起使用,比如执行某个操作出现了错误,然后弹出错误消息提示框。通过使用消息对话框可以提升用户的交互体验,也使得GUI程序更加人性化。

import tkinter as tk
from tkinter import messagebox

window = tk.Tk()
window.title('微信公众号:愤怒的it男')
window.iconbitmap('favicon.ico')
window.geometry('450x300')

def callback():
    result = messagebox.askokcancel(title='温馨提示', message='微信公众号:愤怒的it男')

button = tk.Button(window, text='点击弹框', command=callback)
button.pack(pady=15)

window.mainloop()

欢迎关注作者微信公众号:愤怒的it男

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/134920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python开源项目PGDiff——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

python ansconda 等的下载、安装等请参阅&#xff1a; Python开源项目CodeFormer——人脸重建&#xff08;Face Restoration&#xff09;&#xff0c;模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134334021 友情提示&#xff1a; …

建行广东省江门市分行走进农村地区开展反假货币宣传

人民对美好生活的向往&#xff0c;涉及方方面面&#xff0c;小至“钱袋子”安全。建行广东省江门市分行落实当地监管部门部署&#xff0c;积极扛起维护国家金融安全的重要政治责任&#xff0c;深入农村地区开展反假货币宣传工作&#xff0c;助力构建农村反假货币工作长效机制。…

递归和master公式

前置知识&#xff1a;无 1&#xff09;从思想上理解递归&#xff1a;对于新手来说&#xff0c;递归去画调用图是非常重要的&#xff0c;有利于分析递归 2&#xff09;从实际上理解递归&#xff1a;递归不是玄学&#xff0c;底层是利用系统栈来实现的 3&#xff09;任何递归函…

什么是AI算子开发

今天在某离职群里看到前同事聊天&#xff0c;说到国内某大厂的一个面试&#xff0c;本来求职面试的岗位是通信库&#xff0c;类似于英伟达的 nccl&#xff0c; 但是却被问到了很多与算子开发相关的问题。 看来算子开发岗位依然很稀缺。 联想到之前写过的一篇关于AI算子开发的文…

【JAVA进阶篇】与数据结构结合?这些知识你应该知道

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️JAVA进阶】 文章目录 前言关与JAVA中的数据结构Java中的数据结构 枚举位集合创建一个初始大小的位集合设置特定的位从另一个位集合中复制位迭代位集合中设置为1的位将位集合转换为字节数组将字节数组…

如何在 Azure 中使用自动机器学习进行模型训练

自动机器学习&#xff08;Automated Machine Learning&#xff0c;简称为AutoML&#xff09;是一种通过自动化流程来简化模型训练和调优的技术。在Azure机器学习平台中&#xff0c;AutoML提供了丰富的功能和工具&#xff0c;使我们能够快速地训练和优化机器学习模型。本文将介绍…

nodejs多版本管理

背景 在开发过程中经常会用到不同的nodejs版本&#xff0c;程序在不同版本之间又可能不兼容的情况。一般的做法就是卸载nodejs然后安装需要的版本&#xff0c;这样太过于麻烦。实际上跟conda一样&#xff0c;可以做多版本的管理 解决方法 安装nvm管理nodejs版本&#xff0c;…

windows上运行yolov3代码详解(小白)

batch_normalize1 # 是否做BN 代码链接 环境配置 没有Anaconda的话可以安装下 首先创建虚拟环境&#xff0c;名称随意&#xff0c;版本3.9.我觉得挺好的 激活虚拟环境 conda activate 刚刚创建的环境名称 切换到requirements.txt目录下&#xff0c;直接vscode打开yolov3文件…

Linux应用开发基础知识——字符文字编码(五)

前言&#xff1a; TXT 文件中保存的是字符的核心&#xff1a;它的编码值。而 Notepad 上显示时&#xff0c; 这些字符对应什么样的形状态&#xff0c;这是由字符文件决定的。编码值&#xff0c;字体是两个不一样的东西&#xff0c;比如 A 的编码值是 0x41&#xff0c;但是在屏幕…

2.2 CE修改器:未知数值扫描

本关需要扫描未知数只扫描&#xff0c;要在不知道初始值的情况下找到一个在0到500之间的数值。首先&#xff0c;选择“未知的初始值”扫描方式&#xff0c;在数值类型中选择 4 字节&#xff0c;并点击“首次扫描”以开始扫描。扫描结束后&#xff0c;点击“打我”按钮进行一些操…

CS224W5.3——信念传播

此文中&#xff0c;我们介绍信念传播&#xff0c;这是一种回答图中概率查询的动态规划方法。通过迭代传递消息给邻居节点&#xff0c;如果达成共识&#xff0c;则计算最终的信念值。然后&#xff0c;我们通过示例和泛化树结构展示消息传递。最后讨论了循环信念传播算法及其优缺…

建行驻江门市分行纪检组以政治谈话压责任促发展

开展政治谈话&#xff0c;是加强“一把手”和领导班子监督、严肃党内政治生活、加强对党员领导干部日常教育管理的有效手段。 为督促“一把手”和领导班子成员依法依规履行职责、行使权力&#xff0c;推动党中央重大决策部署以及建设银行总行、广东省分行党委的决策部署在本单…

数据结构之红黑树

红黑树的概念 红黑树&#xff08;Red-Black Tree&#xff09;同AVL树一样, 也是一种自平衡的二叉搜索树, 但在每个结点上增加一个存储位表示结点的颜色, 可以是Red或Black, 通过对任何一条从根到叶子的路径上各个结点着色方式的限制, 红黑树确保没有一条路径会比其他路径长出俩…

Vue23组件自定义事件 和 解绑事件

Vue2&3组件自定义事件 和 解绑事件 Vue2组件自定义事件 功能&#xff1a;父组件绑定数据&#xff0c;子组件触发事件。&#xff08;父绑子触发&#xff09; 实现步骤&#xff08;前三步在父组件实现&#xff0c;第四步在子组件实现&#xff09;&#xff1a; 第一步&#…

测试用例的设计方法(黑盒)

1.基于需求的设计方法 比如针对网易邮箱进行测试&#xff1a;分为功能相关和非功能相关两大类 但是这么设计的话&#xff0c;有无数多个测试用例&#xff0c;我们现在看到的只是一些大概的测试用例&#xff0c;要想设计具体的测试用例&#xff0c;需要用到下面测试用例的方法…

盘点双11!阿里妈妈助这些品牌短视频赢增长!

刚刚&#xff01;一年一度的双11落下帷幕&#xff0c;很多新变化值得回味。 尽管天气在变凉&#xff0c;但市场出现了逐渐回暖的迹象。在此背景下&#xff0c;大量商家特别关心如何在双11打一场漂亮的胜仗。 卖方如何行动&#xff0c;关键在于买方的变化。在阿里妈妈发布的《…

神经网络(第二周)

一、简介 1.1 需求预测示例 1.1.1 逻辑回归算法 根据价格预测商品是否畅销。特征&#xff1a;T恤的价格&#xff1b;分类&#xff1a;销售量高1/销售量低0&#xff1b;使用逻辑回归算法进行分类&#xff0c;拟合效果如下图所示&#xff1a; 1.1.2 神经元和神经网络 将逻辑回…

【LeetCode刷题-二分查找】--162.寻找峰值

162.寻找峰值 方法一&#xff1a;寻找最大值 题目保证了nums[i]≠nums[i1]&#xff0c;所以数组nums中最大值两侧的元素一定严格小于最大值本身&#xff0c;因此最大值所在的位置就是一个可行的峰值位置 class Solution {public int findPeakElement(int[] nums) {int idx 0…

分类网络搭建示例

搭建CNN网络 本章我们来学习一下如何搭建网络&#xff0c;初始化方法&#xff0c;模型的保存&#xff0c;预训练模型的加载方法。本专栏需要搭建的是对分类性能的测试&#xff0c;所以这里我们只以VGG为例。 请注意&#xff0c;这里定义的只是一个简陋的版本&#xff0c;后续一…

什么是数据库事务、事务的ACID、怎么设置/禁止自动提交?

数据库事务及ACID 数据库事务是指作为单个逻辑工作单元执行的一组操作。这组操作要么全部成功地执行&#xff0c;要么全部不执行&#xff0c;不允许出现部分执行的情况。数据库事务通常需要满足ACID属性&#xff0c;即原子性&#xff08;Atomicity&#xff09;、一致性&#x…