GUI编程(Python)

news2024/11/26 8:21:16

        本章,我们将学习GuI (Graphics User Interface) ,即图形用户界面编程,我们可以通过python提供的丰富的组件,快速的实现使用图形界面和用户交互.

        GUI编程类似于“搭积木”,将一个个组件(Widget)放到窗口中.如下是 windows 中的画图软件,就是一个典型的GUI程序:工

         上面的各种按钮、菜单、编辑区域等都是一个个组件,它们都放置到窗口中,并通过增加“对事件的处理”成为一个完整的程序.

常用的GUI库

1. Tkinter

tkinter (Tk interface)是 Python 的标准GUI库,支持跨平台的GUI程序开发。tkinter适合小型的GUI程序编写,也特别适合初学者学习GUI编程。本书以 tkinter为核心进行讲解。

2. wxPython

wxPython是比较流行的GUI库,适合大型应用程序开发,功能强于tkinter ,整体设计框架类似于MFC(MicrosoftFoundation Classes微软基础类库).

3. PyQT

t是一种开源的GUI库,适合大型GUI程序开发,PyQT是t工具包标准的Python实现。我们也可以使用Qt

tkinter模块

本章中,涉及大量的API讲解.学习API最好的来源就是官方提供的文档: tkinter官方网址:

https://docs.python.org/3.7/library/tk.htmlicon-default.png?t=N7T8https://docs.python.org/3.7/library/tk.html或者(相对规整,适合初学者查找):

http://effbot.org/tkinterbook/icon-default.png?t=N7T8http://effbot.org/tkinterbook/

GUI编程的核心步骤和第一个GUI程序

1.创建应用程序主窗口对象(也称:根窗口)

(⑴)通过类Tk的无参构造函数

from tkinter import *

root = Tk()

2.在主窗口中,添加各种可视化组件,比如:按钮(Button) .文本框(Label)等.

btn01 = Button(root)
btn01["text"] = "点我就送花"

 3.通过几何布局管理器,管理组件的大小和位置

btn01.pack()

4.事件处理

(1)通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)

def songhua(e):   #e就是事件对象
    messagebox.showinfo("Message","送你一朵玫瑰花")
    print("送你99朵玫瑰花")

btn01.bind("<Button-1>",songhua)

 【示例】使用tkinter模块,创建GUI应用程序见并实现点击按钮的事件处理

from tkinter import *
from tkinter import messagebox

root = Tk()

btn01 = Button(root)
btn01["text"] = "点我就送花"

def songhua(e):   #e就是事件对象
    messagebox.showinfo("Message","送你一朵玫瑰花")
    print("送你99朵玫瑰花")

btn01.bind("<Button-1>",songhua)

btn01.pack()


root.mainloop()     #调用组件的mainloop()方法,进入事件循环

tkinter主窗口

主窗口位置和大小

通过geometry('wxh ±x±y')进行设置.w为宽度, h为高度.+x表示距屏幕左边的距离;×表示距屏幕右边的距离;+y表示距屏幕上边的距离;-y表示距屏幕下边的距离。

root.title("我的第一个GUI程序")
root.geometry("500x300+100+200")    #500长  300高  +100距左边100  +200距上面200

 GU编程整体描述

图形用户界面是由一个个组件组成,就像小孩“搭积木”一样最终组成了整个界面.有的组件还能在里面再放置其他组件,我们称为“容器”.Tkinter 的GUI组件关系图如下:

根据上图所示,我们依次讲解这些类的基本作用.

- Misc和 Wm:

Tkinter 的 GUI组件有两个根父类,它们都直接继承了object类:

·Misc:它是所有组件的根父类.

- Wm:它主要提供了一些与窗口管理器通信的功能函数.

- Tk

Misc和 Wm派生出子类Tk,它代表应用程序的主窗口,一般应用程序都需要直接或间接使用Tk

- Pack、Place、Grid

Pack、Place、Grid是布局管理器.布局管理器管理组件的:大小、位置.通过布局管理器可以将容器中的组件实现合理的排布.

-BaseWidget

BaseWidget是所有组件的父类

- Widget

Widget是所有组件类的父类.Widget一共有四个父类: BaseWidget、Pack、Grid,Place,意味着,所有GUI组件同时具备这四个父类的属性和方法.

【注】想观察类的层次结构可以在类定义处的类名上单击右键,选择Diagram-->showDiagram.

GUI应用程序类的经典写法

本节程序也是GUI应用程序编写的一个主要结构,采用了面向对象的方式,更加合理的组织代码。

通过Application组织整个GUI程序,类Application继承了Frame 及通过继承拥有了父类的特性.通过构造函数_init__O初始化窗口中的对象,通过createWidgets()方法创建窗口中的对象。

Frame框架是一个 tkinter组件,表示一个矩形的这域。

"""测试一个经典的GUI程序写法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):
    """一个经典的GUI程序的类的写法"""

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()

        self.createWidget()

    def createWidget(self):
        """"创建组件"""
        self.btn01 = Button(self)
        self.btn01["text"] = "点击送花"
        self.btn01.pack()
        self.btn01["command"] = self.songhua

        # 创建一个退出按钮
        self.btnQuit = Button(self, text="退出", command=root.destroy)
        self.btnQuit.pack()

    def songhua(self):
        messagebox.showinfo("送花", "送你99朵玫瑰花")


root = Tk()
root.geometry("400x300+200+300")
root.title("一个经典的GUI程序类的测试")
app = Application(master=root)

root.mainloop()

Label标签

Label(标签)主要用于显示文本信息,也可以显示图像.

Label (标签)有这样一些常见属性:

1. width,height:

用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字占2个字符位置);如果显示是图像,则以像素为单位。默认值是根据具体显示的内容动态调整.

2. font

指定字体和字体大小,如: font = (font_name,size)

3. image:

显示在Label上的图像,目前tkinter只支持gif格式

4. fg和 bg

fg (foreground):前景色、bg (background):背景色

5. justify

针对多行文字的对齐,可设置justify )属性,可选值"left","center" or "right"

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """"创建组件"""
        self.label01 = Label(self,text="Label01内容",width=10,height=2,bg="black",fg="white")
        self.label01.pack()
        self.label02 = Label(self, text="Label02内容", width=10, height=2, bg="blue", fg="white",font=("黑体",20))
        self.label02.pack()

        #显示图像
        global photo        #声明后就不会被销毁,就能显示出来
        photo = PhotoImage(file="templates/a1.gif")
        #改扩展名不能解决问题,需要打开画图工具另存为GIF格式即可
        #此时photo是一个局部变量,调用完createWidget后会被销毁,但mainloop是一直循环的
        self.label03 = Label(self,image=photo)
        self.label03.pack()

        self.label04 = Label(self,text="姓名:\twjw\n年龄:\t18\n姓名:\tnan",
                             borderwidth=1,relief="solid",justify="left")
        self.label04.pack()
root = Tk()
root.geometry("400x600+200+300")
app = Application(master=root)

root.mainloop()

Options选项详解

通过学习Label组件.我们发现可以通过Options 设置组件的属性.从而控制组件的各种状态,比如:宽度、高度、颜色、位置等等.

我们可以通过三种方式设置Options选项,这在各种GUI组件中用法都一致.

1.创建对象时。使用命名参数(也叫关键字参数)

fred = Button(self, fg="red", bg="blue")

 2.创建对象后,使用字典索引方式

fred["fg]= "red"

fred["bg"] = "blue"

 3.创建对象后,使用config()方法

fred.config(fg=""red", bg="blue")

 如何查看组件的Options选项:

1.可以通过打印config()方法的返回值,查看Options选项

        print(fred.config())

 2.通过在IDE中,点击组件对象的构造方法、进人到方法内观察:

按住Ctrl键加左键

 上面代码中有:“standard options标准选项”和“widget-specific options 组件特定选项".我们将常见的选项汇总如下:

 

 

 Button

Button(按钮)用来执行用户的单击操作.Button可以包文本,也可以包含图像.按钮被单击后会自动调用对应事绑定的方法.

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """"创建组件"""
        self.btn01 = Button(root,text="登录",
                            width=6,height=3,anchor=NE,command=self.login)
        self.btn01.pack()

        global photo
        photo = PhotoImage(file="templates/a1.gif")
        self.btn02 = Button(root,image=photo,command=self.login)
        self.btn02.pack()
        #self.btn02.config(state="disabled")  #设置按钮为禁用

    def login(self):
        messagebox.showinfo("mytest","登录成功!请开始学习!")

root = Tk()
root.geometry("400x600+200+300")
app = Application(master=root)

root.mainloop()

Entry 单行文本框

Entry 用来接收一行字符串的控件.如果用户输入的文字长度长于Entry控件的宽度时,文字会自动向后滚动.如果想输入多行文本,需要使用Text控件.

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """"创建组件"""
        self.lab01 = Label(self,text="用户名")
        self.lab01.pack()

        # StringVar变量绑定到指定的组件
        # StringVar变量的值发生变化,组件内容也发生变化
        # 组件内容发生变化。StringVar变量的值也发生变化
        v1 = StringVar()
        self.entry01 = Entry(self,textvariable=v1)
        self.entry01.pack()
        v1.set("admin")
        print(v1.get());print(self.entry01.get())

        #创建密码框
        self.lab02 = Label(self, text="密码")
        self.lab02.pack()

        v2 = StringVar()
        self.entry02 = Entry(self, textvariable=v2,show="*")
        self.entry02.pack()


        self.btn01 = Button(self,text="登录",command=self.login)
        self.btn01.pack()

    def login(self):
        print("用户名"+self.entry01.get())
        print("密码"+self.entry02.get())
        messagebox.showinfo("mytest","登录成功!请开始学习!")

root = Tk()
root.geometry("400x130+200+300")
app = Application(master=root)

root.mainloop()

Text多行文本框

Text(多行文本框)的主要用于显示多行文本,还可以显示网页链接,图片,HTML页面,甚至cSS样式表,添加组件等。因此,也常被当做简单的文本处理器、文本编辑器或者网页浏览器来使用。比如IDLE就是Text组件构成的。

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
import webbrowser


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """"创建组件"""
        self.w1 = Text(root, width=40, height=12, bg="gray")
        # 宽度20个字母(10个汉字),高度一个行高
        self.w1.pack()

        # 1.0 第一行第零列    2.3 第二行第三列
        self.w1.insert(1.0, "0123456789\nabcdefg")
        self.w1.insert(2.3, "锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦\n")

        Button(self, text="重复插入文本", command=self.insertText).pack(side="left")
        Button(self, text="返回文本", command=self.returnText).pack(side="left")
        Button(self, text="添加图片", command=self.addImage).pack(side="left")
        Button(self, text="添加组件", command=self.addWidget).pack(side="left")
        Button(self, text="通过tag精确控制文本", command=self.testTag).pack(side="left")

    def insertText(self):
        # INSERT索引表示在光标处插入
        self.w1.insert(INSERT, " Wangjiwen")
        # END索引号表示在最后插入
        self.w1.insert(END, "[sxt]")

    def returnText(self):
        # Index(索引)是用来指向Text组件文本的位置,Text的组件索引也是对应实际字符之间的位置
        # 核心:行号以1开始  列号以0开始
        print(self.w1.get(1.2,1.6))
        self.w1.insert(1.8,"wangjiwen")
        print("所有文本内容:\n"+self.w1.get(1.0,END))

    def addImage(self):
        # gloal photo
        self.photo = PhotoImage(file="templates/a1.gif")
        self.w1.image_create(END,image=self.photo)

    def addWidget(self):
        b1 = Button(self.w1,text="mytset")
        # 在text创建组件的命令
        self.w1.window_create(INSERT,window=b1)

    def testTag(self):
        self.w1.delete(1.0,END)
        self.w1.insert(INSERT,"good good study,day day up\nmytest\n略略略\n百度\n你猜我在干嘛")
        self.w1.tag_add('good',1.0,1.9)
        self.w1.tag_config('good',background="yellow",foreground="red")

        self.w1.tag_add('baidu', 4.0, 4.2)
        self.w1.tag_config('baidu',underline=True)
        self.w1.tag_bind("baidu","<Button-1>",self.webshow)

    def webshow(self,event):
        webbrowser.open("http://www.baidu.com")


root = Tk()
root.geometry("400x130+200+300")
app = Application(master=root)

root.mainloop()

Checkbutton复选按钮

Checkbutton控件用于选择多个按钮的情况。Checkbutton可以显标文本,也可以显示图像。

 Radiobutton

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """"创建组件"""
        self.v = StringVar()
        self.v.set("M")

        self.r1 = Radiobutton(self,text="男性",value="M",variable=self.v)
        self.r2 = Radiobutton(self,text="女性",value="F",variable=self.v)

        self.r1.pack(side="left")
        self.r2.pack(side="left")

        Button(self,text="确定",command=self.confirm).pack(side="left")

    def confirm(self):
        messagebox.showinfo("测试","选择的性别"+self.v.get())

root = Tk()
root.geometry("400x130+200+300")
app = Application(master=root)

root.mainloop()

 Checkbutton

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        self.codeHobby = IntVar()
        self.videoHobby = IntVar()

        print(self.codeHobby.get())  # 默认值是 0
        self.c1 = Checkbutton(root, text="敲代码",
                              variable=self.codeHobby, onvalue=1, offvalue=0)
        self.c2 = Checkbutton(root, text="看视频",
                              variable=self.videoHobby, onvalue=1, offvalue=0)

        self.c1.pack(side="left")
        self.c2.pack(side="left")
        Button(root, text="确定", command=self.confirm).pack(side="left")

    def confirm(self):
        if self.videoHobby.get() == 1:
            messagebox.showinfo("测试", "看视频emmm不评价")
        if self.codeHobby.get() == 1:
            messagebox.showinfo("测试", "你竟然还在卷!!-")


root = Tk()
root.geometry("400x130+200+300")
app = Application(master=root)

root.mainloop()

canvas画布

canvas (画布)是一个矩形区域,可以放置图形、图像、组件等。本节我们简单介绍canvas 的使用,更加详细和深入的内容将在后面的“图形绘制”章节讲解.

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox
import random


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        self.canvas = Canvas(self,width=300,height=200,bg="green")
        self.canvas.pack()
        # 画一条直线,从
        line = self.canvas.create_line((10,10),(30,20),(40,50))
        # 画一个矩形
        rect = self.canvas.create_rectangle((50,50),(100,100))
        # 画一个椭圆,坐标两双为椭圆边界矩形的左上和右下
        oval = self.canvas.create_oval((50,50),(100,100))

        global photo
        photo = PhotoImage(file="templates/a1.gif")
        self.canvas.create_image((150,170),image=photo)

        Button(self,text="画十个矩形",command=self.draw50Recg).pack(side="left")

    def draw50Recg(self):
        for i in range(0,10):
            x1 = random.randrange(int(self.canvas["width"])/2)
            y1 = random.randrange(int(self.canvas["height"])/2)
            x2 = x1 + random.randrange(int(self.canvas["width"])/2)
            y2 = y1 +  random.randrange(int(self.canvas["height"])/2)
            self.canvas.create_rectangle((x1,y1),(x2,y2))


if __name__ == '__main__':
    root = Tk()
    root.geometry("600x600+200+300")
    app = Application(master=root)

    root.mainloop()

布局管理器

一个GUI应用程序必然有大量的组件,这些组件如何排布?这时候,就需要使用tkinter提供的布局管理器帮助我们组织、管理在父组件中子组件的布局方式。tkinter提供了三种管理器: pack、 grid、 place.

grid布局管理器

grid表格布局,采用表格结构组织组件。子组件的位置由行和列的单元格来确定,并且可以跨行和跨列,从而实现复杂的布局.

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """通过grid布局实现登陆界面"""
        self.label01 = Label(self, text="用户名")
        self.label01.grid(row=0, column=0)
        self.entry01 = Entry(self)
        self.entry01.grid(row=0, column=1)
        Label(self, text="用户名为手机号").grid(row=0, column=2)

        Label(self, text="密码").grid(row=1, column=0)
        Entry(self, show="*").grid(row=1, column=1)

        Button(self, text="登录").grid(row=2, column=1, sticky=EW)
        Button(self, text="取消").grid(row=2, column=2, sticky=E)


if __name__ == '__main__':
    root = Tk()
    root.geometry("600x100+200+300")
    app = Application(master=root)

    root.mainloop()

【示例】通过grid布局-实现计算器软件界面

根据实际简易计算器的按键分布,设计一个相仿的计算器界面,相应的功能暂不需要实现.

"""测试label组件的基本用法,使用面向对象的写法"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """通过grid布局实现登陆界面"""
        btnText = (("MC","M+","M-","MR"),
                   ("C","±","/","x"),
                   ("7","8","9","-"),
                   ("4","5","6","+"),
                   ("1","2","3","="),
                   ("0","."))

        Entry(self).grid(row=0,column=0,columnspan=4,pady=10)

        for rindex,r in enumerate(btnText):
            for cindex,c in enumerate(r):
                if c== "=":
                    Button(self, text=c, width=2).grid(row=rindex + 1, column=cindex,rowspan=2, sticky=NSEW)
                elif c== "0":
                    Button(self, text=c, width=2).grid(row=rindex + 1, column=cindex,columnspan=2, sticky=NSEW)
                elif c== ".":
                    Button(self, text=c, width=2).grid(row=rindex + 1, column=cindex+1, sticky=NSEW)
                else:
                    Button(self,text=c,width=2).grid(row=rindex+1,column=cindex,sticky=NSEW)



if __name__ == '__main__':
    root = Tk()
    root.geometry("200x230+200+300")
    app = Application(master=root)

    root.mainloop()

 效果:

pack布局管理器

pack按照组件的创建顺序将子组件添加到父组件中,按照垂直或者水平的方向自然排布。如果不指定任何选项,默认在父组件中自顶向下垂直添加组件.

pack是代码量最少,最简单的一种,可以用于快速生成界面.

如上列出了pack布局所有的属性,但是不需要挨个熟悉,了解基本的即可.pack适用于简单的垂直或水平排布,如果需要复杂的布局可以使用grid 或place.

【示例】pack布局用法,制作钢琴按键布局

from tkinter import *
from tkinter import messagebox

root = Tk()
root.geometry("700x220")

# Frame是一个矩形区域,用来放置其他组件
f1 = Frame(root)
f1.pack()
f2 = Frame(root)
f2.pack()

btnText = ("流行风","中国风","日本风","重金属","轻音乐")

for txt in btnText:
    Button(f1,text=txt).pack(side="left",padx="10")

for i in range(1,20):
    Label(f2,width=5,height=10,borderwidth=1,relief="solid",
          bg="black" if i%2==0 else "white").pack(side="left",padx=2)

root.mainloop()

 place布局管理器

place布局管理器可以通过坐标精确控制组件的位置,适用于一些布局更加灵活的场景。

from tkinter import *
from tkinter import messagebox

root = Tk()
root.geometry("500x300")

root.title("布局管理place")
root["bg"] = "white"

f1 = Frame(root,width=200,height=200,bg="green")
f1.place(x=30,y=30)

# relwidth 与 relheight 相当于root整个高度的0.2和0.5
# relx 与 rely 相当于 对象的 零点几
# relx 与 x 同时存在时,先按relx定位,再按x平移
Button(root,text="test").place(relx=0.2,x=100,y=20,relwidth=0.2,relheight=0.5)
Button(f1,text="程序员").place(relx=0.6,rely=0.7)
Button(f1,text="老司机").place(relx=0.5,rely=0.2)


root.mainloop()

效果:

 事件处理

一个GUI应用整个生命周期都处在一个消息循环(eventloop)中.它等待事件的发生,并作出相应的处理。

Tkinter提供了用以处理相关事件的机制.处理函数可被绑定给各个控件的各种事件.

widget.bind(event, handler)

 如果相关事件发生,handler函数会被触发,事件对象event会传递给handler 函数.

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows环境下配置git环境变量

路由当前目录 vim 打开 .bash_profile PATH$PATH:/d/phpstudy_pro/Extensions/php/php7.4.3nts PATH$PATH:/d/phpstudy_pro/Extensions/php8/php8.2.9nts PATH$PATH:/d/phpstudy_pro/Extensions/composer2.5.8 …

大数据概论总结

三次信息化浪潮 : 信息技术的支撑 : 存储设备容量不断增加 CPU的处理能力不断提高 网络带宽不断增加 数据产生方式的变革促成大数据时代的来临 运营式系统阶段用户原创内容感知式系统阶段 大数据发展历程 : 分为三个阶段 : 大数据的概念 : 1 . 数据量大 : 根据IDC作出…

再也不用担心流量超过上限了!Windows 11中监控数据使用情况的几种方法

序言 如果你使用按流量计费的连接或担心超过数据上限,在Windows上监控你的数据使用情况可能是有益的。这允许你调整你的使用模式,以确保你有效地使用数据。方法如下。 使用任务管理器密切关注数据使用情况 在任务管理器中,你可以实时监控计算机上的应用程序使用的数据量。…

Prisma数据库ORM框架学习

初始化项目 中文网站 点击快速开始,点击创建sql项目,后面一步一步往后走 这个博主也挺全的,推荐下 可以看这个页面初始化项目跟我下面是一样的,这里用得是ts,我下面是js,不需要额外的配置了 1.vscode打开一个空文件夹 2.npm init -y 初始化package.json 3.安装相关依赖 …

判断环形链表-链表题

141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head;ListNode* fast head;while(fast ! NULL &&fast->next ! NULL){fast fast->next->next;slow slow->next;if(fast…

跟着AI学AI_07张量、数组、矩阵

说明这三个概念不是一个范畴的东西&#xff0c;但是很容易混淆&#xff0c;因此放到一起进行说明。 张量&#xff08;Tensor&#xff09; 张量是一个多维数组的通用概念&#xff0c;用于表示具有任意维度的数值数据。在数学和计算机科学中&#xff0c;张量是广泛用于表示数据的…

力扣752. 打开转盘锁

Problem: 752. 打开转盘锁 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.用一个集合 deads 存储所有的“死锁”状态&#xff0c;一个集合 visited 存储所有已经访问过的状态&#xff0c;以避免重复访问&#xff0c;一个队列 q 进行广度优先搜索&#xff08;BF…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(七)---- 系统调用函数与GDB(Lab: system calls)

系列文章目录 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&#xff09;---- 课程实验环境搭建&am…

组织创新|AI赋能敏捷实践,助力企业敏捷转型

在工业5.0时代&#xff0c;随着项目变得越来越复杂&#xff0c;对效率的需求也在增长&#xff0c;致力于敏捷转型的组织正在寻求创新的解决方案来应对常见的挑战&#xff1a;工作量不平衡、低效的任务分配和知识孤岛等等。对此&#xff0c;AI等尖端技术的潜力可以帮助实现更高效…

mask2former利用不确定性采样点选择提高模型性能

在机器学习和深度学习的训练过程中&#xff0c;不确定性高的点通常代表模型在这些点上的预测不够可靠或有较高的误差。因此&#xff0c;关注这些不确定性高的点&#xff0c;通过计算这些点的损失并进行梯度更新&#xff0c;可以有效地提高模型的整体性能。确定性高的点预测结果…

互联网全栈开发:产品经理、后端开发、前端开发、运维、测试等

我们都知道互联网公司&#xff0c;有几个较为重要的职业&#xff1a; 产品经理 后端开发 前端开发 运维 测试 这些技术往往相互隔阂&#xff0c;存在技术壁垒&#xff0c;而我开通了抖音号&#xff0c;常在抖音中发送这些视频&#xff0c;我的抖音号:1056668488。请大家麻…

EVA-CLIP实战

摘要 EVA-CLIP,这是一种基于对比语言图像预训练(CLIP)技术改进的模型,通过引入新的表示学习、优化和增强技术,显著提高了CLIP的训练效率和效果。EVA-CLIP系列模型在保持较低训练成本的同时,实现了与先前具有相似参数数量的CLIP模型相比更高的性能。特别地,文中提到的EV…

10 款最佳免费 Google SEO 工具

谷歌提供了免费测试和报告的工具&#xff0c;以帮助网站所有者和 SEO 专业人员分析和提高其网站的搜索性能。这些是最好的免费谷歌搜索引擎优化工具&#xff0c;用于升级您的搜索引擎优化&#xff0c;以及帮助您发现新的关键字机会以及帮助您发现新的关键字机会的工具。 无论您…

Nature最新!浙大王浩华团队:一种创新方法使量子态传输的保真度大大提高

在量子计算的快速发展过程中&#xff0c;量子信息传输技术&#xff08;量子态传输&#xff09;的进步至关重要。 然而&#xff0c;当前固态量子系统在实现量子信息传输方面存在一些显著的挑战&#xff0c;例如量子混沌或者系统不完美&#xff0c;其传输的保真度和效率通常难以…

VMware Ubuntu虚拟机上设置SSH连接,win直接用ssh连接虚拟机

要在Ubuntu虚拟机上设置SSH连接&#xff0c;并进行一些特定配置&#xff0c;您可以按照以下步骤进行操作&#xff1a; 步骤 1&#xff1a;安装OpenSSH Server 打开终端。 更新包列表并安装OpenSSH Server&#xff1a; sudo apt update sudo apt install openssh-server安装完…

51单片机实验05 -点阵

目录 一&#xff0c;熟悉矩阵led小灯 1&#xff0c;点亮矩阵的一只led 2&#xff0c;点亮矩阵的一排led 3&#xff0c;点亮矩阵的全部led static 关键字 unsigned 关键字 4&#xff0c;点阵的静态显示 2&#xff09;心形矩阵显示代码 3&#xff09;效果 二&#xff0c;课…

跑起来字节跳动音频超分开源项目versatile_audio_super_resolution

已部署在AutoDL上https://www.codewithgpu.com/i/haoheliu/versatile_audio_super_resolution/versatile_audio_super_resolution ipynb: 音乐 By 邓文怡 一个深圳的小姑娘%cd /root/versatile_audio_super_resolution/运行目录# 读取一个mp3音频文件&#xff0c;然后将它转换…

数据安全交换系统 与网闸有什么区别?

数据安全交换系统是指用于安全地传输、共享和交换数据的一种系统。这样的系统通常包括一系列安全性和隐私保护功能&#xff0c;确保数据在传输和存储过程中不会被未经授权的用户访问、泄露或篡改。 数据安全交换系统和网闸在功能和定位上有一些区别&#xff1a; 功能&#xff…

PDU模块中浪涌保护模块与空开模块的应用

由于PDU具体应用的特殊性&#xff0c;其在规划设计时具有应用场景的针对性&#xff0c;同时PDU的高度定制化的特点&#xff0c;是其他电气联接与保护产品所不具备的。 PDU基础的输出输入功能外&#xff0c;其电路的控制与电压保护器同时也极为重要。空气开关和浪涌保护器相关功…

Java课程设计:基于Java+Swing+MySQL的图书管理系统(内附源码)

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 图书管理系统是一个常见的软件项目,广泛应用于图书馆、学校、企业等需要管理图书资源的场景。该系统通常涵盖图书信息录入、查询、借阅、归还等核心功能,是实现图书资源高效管理的重要工具。 随着信…