Python进阶知识(2)—— 什么是GUI编程?一起来学习用Python,Tkinter“做画”吧

news2025/1/21 4:45:22

All things are difficult before they are easy.
凡事必先难后易。

在这里插入图片描述

01 | 📕 什么是 G U I ? \color{red}{什么是GUI?} 什么是GUI📕

GUI是Graphical User Interface(图形用户界面)的缩写。它是指通过图形化的方式,为人们提供更加友好、直观的用户界面,使得用户可以通过鼠标和键盘等外设更加轻松、快捷地操作计算机。在GUI界面中,计算机会呈现出各种窗口、按钮、菜单、对话框等控件,用户可以通过这些控件与计算机进行交互。常见的GUI框架有Tkinter、Qt、wxPython等。

Python提供了多种库和框架来创建图形用户界面(GUI)。其中,最常用的是Python自带的Tkinter库、PyQt和wxPython等第三方库。先从最简单的Tkinter库开始学习

02 | 📙 什么是 T k i n t e r ?为什么是 T k i n t e r ? \color{orange}{什么是Tkinter?为什么是Tkinter?} 什么是Tkinter?为什么是Tkinter📙

  • 什么是Tkinter?

    Tkinter是Python中的一个标准图形用户界面(GUI)库,它是Python的内置库,可以方便地创建窗口应用程序并为其添加用户界面。

    Tkinter提供了各种控件(如按钮、文本框、标签等)和布局选项,可以轻松地创建各种复杂的GUI界面。同时,Tkinter库还提供了绘图功能、文件对话框等实用工具,使得可以在应用中添加更多的功能和交互性,让应用更加出色。

    使用Tkinter库,可以创建漂亮而功能强大的桌面应用程序,包括游戏、工具、图像编辑器等。它是Python开发中非常重要的一部分,应用广泛。

  • 为什么学习Tkinter?
    由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库进行使用,不用多余的环境配置步骤,讲究的就是一个便捷

  • 怎么安装Tkinter?

    pip install tkinter
    

03 | 📒 了解 T k i n t e r 基础知识 \color{yellow}{了解Tkinter基础知识} 了解Tkinter基础知识📒

想要学习tkinter,我们首先需要了解它的基础知识,包括如何创建窗口、如何添加组件、如何设置布局等,常用的基本步骤如下

  1. 导入模块:要使用tkinter库,需要先导入它,import tkinter表示导入tkinter库。

    import tkinter as tk
    
  2. 创建主窗口:在tkinter中,所有图形用户界面组件都必须是某个容器的子组件。通常,最顶层的容器是主窗口,可以用如下代码创建:

    root = tkinter.Tk()
    

    这条语句创建了一个名为root的窗口。

  3. 设置窗口标题:通过调用title()方法,可以设置主窗口的标题,例如:

    root.title("窗口标题")
    

    这将显示一个标题为“窗口标题”的窗口。

  4. 设置窗口尺寸:可以调用geometry()方法来设置主窗口的大小,例如:

    root.geometry("400x300")
    

    这将创建一个宽度为400像素,高度为300像素的窗口。

  5. 添加组件:在tkinter中,可以通过创建各种组件来构建GUI界面。例如按钮、标签、文本框等。可以使用如下代码创建一个按钮:

    btn = tkinter.Button(root, text="按钮文本")
    

    这将创建一个名为btn的按钮,并将其作为主窗口的子组件展示出来。

  6. 组件布局:要将组件放置在GUI窗口中,可以使用pack()place()grid()等方法。例如:

    btn.pack()
    

    这将使按钮出现在主窗口的默认位置。

  7. 显示窗口:要显示GUI窗口,需要调用mainloop()方法,例如:

    root.mainloop()
    

    这将在屏幕上显示主窗口并监听事件,直到主窗口被关闭。

  8. 处理事件:在tkinter中,事件是用户输入或系统触发的动作,例如键盘输入或鼠标点击。可以使用bind()方法将事件函数绑定到指定组件的特定事件上,例如:

    btn.bind('<Button-1>', handle_btn_click)
    

    这表示将handle_btn_click()函数与按钮的左键单击事件绑定起来。

除此之外,tkinter还提供了很多常用组件,例如菜单、对话框、画布等,之后再进一步学习。

04 | 📗 T k i n t e r 示例学习 \color{green}{Tkinter示例学习} Tkinter示例学习📗

  1. 以下是一个简单的示例,演示了如何使用tkinter创建一个基本的窗口

    import tkinter as tk
    # 创建窗口
    window = tk.Tk()
    window.title("My Window")
    window.geometry("300x200")
    
    # 添加标签
    label = tk.Label(window, text="Hello World!")
    label.pack()
    
    # 进入消息循环
    window.mainloop()
    

    通过上述代码,我们可以创建一个300x200的窗口,添加一个标签,并在窗口中显示出来。接下来,我们需要深入学习tkinter的各种组件和布局。

  2. 掌握常用组件和布局方式
    tkinter提供了各种GUI组件,例如按钮、文本框、选择框、滚动条等。在实际开发中,我们需要灵活运用这些组件,以满足不同的需求。以下是一个示例代码,展示了如何使用Frame和Button组件:

    import tkinter as tk
    
    window = tk.Tk()
    window.title("My Window")
    window.geometry("300x200")
    
    # 创建Frame
    frame = tk.Frame(window)
    frame.pack()
    
    # 添加按钮
    btn1 = tk.Button(frame, text="Button 1")
    btn1.pack(side=tk.LEFT)
    
    btn2 = tk.Button(frame, text="Button 2")
    btn2.pack(side=tk.LEFT)
    
    btn3 = tk.Button(frame, text="Button 3")
    btn3.pack(side=tk.LEFT)
    
    window.mainloop()
    

    上述代码创建了一个300x200的窗口,包含一个Frame和三个按钮。按钮被添加到Frame中,并通过设置side参数来实现水平排列。掌握常用组件和布局方式是学习tkinter的关键所在。

  3. 学习事件处理机制
    在GUI程序中,常常需要响应用户的交互操作。例如点击按钮、输入文本等都会触发相应的事件。我们需要了解tkinter的事件处理机制,并学会如何编写事件处理函数。以下是一个示例代码,演示了如何响应按钮的点击事件:

    import tkinter as tk
    
    window = tk.Tk()
    window.title("My Window")
    window.geometry("300x200")
    
    def on_btn_click():
    	label.config(text="Button Clicked!")
    
    # 添加标签
    label = tk.Label(window, text="Hello World!")
    label.pack()
    
    # 添加按钮
    btn = tk.Button(window, text="Click Me", command=on_btn_click)
    btn.pack()
    
    window.mainloop()
    

    在上述代码中,我们定义了一个名为on_btn_click的函数,该函数会在按钮被点击时触发。通过设置按钮的command参数,我们将按钮和该函数关联。当按钮被点击时,就会调用该函数,并在标签中显示相应的文本。

通过示例,学习了如何使用tkinter创建窗口、添加组件、设置布局,以及如何编写事件处理函数,下面来简单的练习一下吧

05 | 📘 经典练习:实现一个简单的计算器 \color{blue}{经典练习:实现一个简单的计算器} 经典练习:实现一个简单的计算器📘

下面是实现计算器的详细步骤:

  1. 导入Tkinter库

    from tkinter import *
    
  2. 创建主窗口对象

    window = Tk()
    window.title("计算器")
    
  3. 定义布局

    result = Entry(window, width=33, borderwidth=5)
    result.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
    
    button_1 = Button(window, text="1", padx=40, pady=20, command=lambda: button_click(1))
    button_2 = Button(window, text="2", padx=40, pady=20, command=lambda: button_click(2))
    button_3 = Button(window, text="3", padx=40, pady=20, command=lambda: button_click(3))
    button_4 = Button(window, text="4", padx=40, pady=20, command=lambda: button_click(4))
    button_5 = Button(window, text="5", padx=40, pady=20, command=lambda: button_click(5))
    button_6 = Button(window, text="6", padx=40, pady=20, command=lambda: button_click(6))
    button_7 = Button(window, text="7", padx=40, pady=20, command=lambda: button_click(7))
    button_8 = Button(window, text="8", padx=40, pady=20, command=lambda: button_click(8))
    button_9 = Button(window, text="9", padx=40, pady=20, command=lambda: button_click(9))
    button_0 = Button(window, text="0", padx=40, pady=20, command=lambda: button_click(0))
    
    button_add = Button(window, text="+", padx=39, pady=20, command=button_add)
    button_subtract = Button(window, text="-", padx=41, pady=20, command=button_subtract)
    button_multiply = Button(window, text="*", padx=40, pady=20, command=button_multiply)
    button_divide = Button(window, text="/", padx=41, pady=20, command=button_divide)
    
    button_clear = Button(window, text="清空", padx=79, pady=20, command=button_clear)
    button_equals = Button(window, text="=", padx=91, pady=20, command=button_equals)
    
  4. 创建按钮操作函数

    def button_click(number):
    	current = result.get()
    	result.delete(0, END)
    	result.insert(0, str(current) + str(number))
    
    def button_clear():
    	result.delete(0, END)
          
    def button_add():
    	first_number = result.get()
    	global f_num
    	global math
    	math = "addition"
    	f_num = int(first_number)
    	result.delete(0, END)
    
    def button_subtract():
    	first_number = result.get()
    	global f_num
    	global math
    	math = "subtraction"
    	f_num = int(first_number)
    	result.delete(0, END)
    
    def button_multiply():
    	first_number = result.get()
    	global f_num
    	global math
    	math = "multiplication"
    	f_num = int(first_number)
    	result.delete(0, END)
    
    def button_divide():
    	first_number = result.get()
    	global f_num
    	global math
    	math = "division"
    	f_num = int(first_number)
    	result.delete(0, END)
    
    def button_equals():
    	second_number = result.get()
    	result.delete(0, END)
    
    	if math == "addition":
        	result.insert(0, f_num + int(second_number))
        
    	if math == "subtraction":
        	result.insert(0, f_num - int(second_number))
        
    	if math == "multiplication":
        	result.insert(0, f_num * int(second_number))
        
    	if math == "division":
        	result.insert(0, f_num / int(second_number))
    
  5. 定义按钮位置和样式

    button_1.grid(row=3, column=0)
    button_2.grid(row=3, column=1)
    button_3.grid(row=3, column=2)
    
    button_4.grid(row=2, column=0)
    button_5.grid(row=2, column=1)
    button_6.grid(row=2, column=2)
    
    button_7.grid(row=1, column=0)
    button_8.grid(row=1, column=1)
    button_9.grid(row=1, column=2)
    
    button_0.grid(row=4, column=0)
    
    button_clear.grid(row=4, column=1, columnspan=2)
    button_add.grid(row=5, column=0)
    button_subtract.grid(row=6, column=0)
    button_multiply.grid(row=6, column=1)
    button_divide.grid(row=6, column=2)
    
    button_equals.grid(row=5, column=1, columnspan=2)
    
  6. 运行主循环

    window.mainloop()
    

下面是完整代码:

from tkinter import *

window = Tk()
window.title("计算器")

result = Entry(window, width=33, borderwidth=5)
result.grid(row=0, column=0, columnspan=4, padx=10, pady=10)

def button_click(number):
    current = result.get()
    result.delete(0, END)
    result.insert(0, str(current) + str(number))
    
def button_clear():
    result.delete(0, END)
          
def button_add():
    first_number = result.get()
    global f_num
    global math
    math = "addition"
    f_num = int(first_number)
    result.delete(0, END)
    
def button_subtract():
    first_number = result.get()
    global f_num
    global math
    math = "subtraction"
    f_num = int(first_number)
    result.delete(0, END)
    
def button_multiply():
    first_number = result.get()
    global f_num
    global math
    math = "multiplication"
    f_num = int(first_number)
    result.delete(0, END)
    
def button_divide():
    first_number = result.get()
    global f_num
    global math
    math = "division"
    f_num = int(first_number)
    result.delete(0, END)
    
def button_equals():
    second_number = result.get()
    result.delete(0, END)
    
    if math == "addition":
        result.insert(0, f_num + int(second_number))
        
    if math == "subtraction":
        result.insert(0, f_num - int(second_number))
        
    if math == "multiplication":
        result.insert(0, f_num * int(second_number))
        
    if math == "division":
        result.insert(0, f_num / int(second_number))

button_1 = Button(window, text="1", padx=40, pady=20, command=lambda: button_click(1))
button_2 = Button(window, text="2", padx=40, pady=20, command=lambda: button_click(2))
button_3 = Button(window, text="3", padx=40, pady=20, command=lambda: button_click(3))
button_4 = Button(window, text="4", padx=40, pady=20, command=lambda: button_click(4))
button_5 = Button(window, text="5", padx=40, pady=20, command=lambda: button_click(5))
button_6 = Button(window, text="6", padx=40, pady=20, command=lambda: button_click(6))
button_7 = Button(window, text="7", padx=40, pady=20, command=lambda: button_click(7))
button_8 = Button(window, text="8", padx=40, pady=20, command=lambda: button_click(8))
button_9 = Button(window, text="9", padx=40, pady=20, command=lambda: button_click(9))
button_0 = Button(window, text="0", padx=40, pady=20, command=lambda: button_click(0))

button_add = Button(window, text="+", padx=39, pady=20, command=button_add)
button_subtract = Button(window, text="-", padx=41, pady=20, command=button_subtract)
button_multiply = Button(window, text="*", padx=40, pady=20, command=button_multiply)
button_divide = Button(window, text="/", padx=41, pady=20, command=button_divide)

button_clear = Button(window, text="清空", padx=79, pady=20, command=button_clear)
button_equals = Button(window, text="=", padx=91, pady=20, command=button_equals)

button_1.grid(row=3, column=0)
button_2.grid(row=3, column=1)
button_3.grid(row=3, column=2)

button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)

button_7.grid(row=1, column=0)
button_8.grid(row=1, column=1)
button_9.grid(row=1, column=2)

button_0.grid(row=4, column=0)

button_clear.grid(row=4, column=1, columnspan=2)
button_add.grid(row=5, column=0)
button_subtract.grid(row=6, column=0)
button_multiply.grid(row=6, column=1)
button_divide.grid(row=6, column=2)

button_equals.grid(row=5, column=1, columnspan=2)

window.mainloop()

在这里插入图片描述

06 | 🎫 归纳总结:代码重构 \color{cyan}{归纳总结:代码重构} 归纳总结:代码重构🎫

通过前面所学的函数、类和对象的知识,把上面的草稿版计算器重构一下,顺便换一下这个丑陋的界面了🎃🎃🎃

import tkinter as tk

class Calculator:
    def __init__(self, master):
        self.master = master
        master.title('Calculator')
        self.create_widgets()

    def create_widgets(self):
        self.display = tk.Entry(self.master, width=30, justify='right', font=('Arial', 16))
        self.display.grid(row=0, column=0, columnspan=4, padx=10, pady=10)

        # Add Buttons
        self.button_1 = tk.Button(self.master, text='1', width=7, height=2, command=lambda: self.button_click('1'))
        self.button_2 = tk.Button(self.master, text='2', width=7, height=2, command=lambda: self.button_click('2'))
        self.button_3 = tk.Button(self.master, text='3', width=7, height=2, command=lambda: self.button_click('3'))
        self.button_4 = tk.Button(self.master, text='4', width=7, height=2, command=lambda: self.button_click('4'))
        self.button_5 = tk.Button(self.master, text='5', width=7, height=2, command=lambda: self.button_click('5'))
        self.button_6 = tk.Button(self.master, text='6', width=7, height=2, command=lambda: self.button_click('6'))
        self.button_7 = tk.Button(self.master, text='7', width=7, height=2, command=lambda: self.button_click('7'))
        self.button_8 = tk.Button(self.master, text='8', width=7, height=2, command=lambda: self.button_click('8'))
        self.button_9 = tk.Button(self.master, text='9', width=7, height=2, command=lambda: self.button_click('9'))
        self.button_0 = tk.Button(self.master, text='0', width=7, height=2, command=lambda: self.button_click('0'))

        # Layout Buttons
        self.button_1.grid(row=1, column=0, padx=10, pady=10)
        self.button_2.grid(row=1, column=1, padx=10, pady=10)
        self.button_3.grid(row=1, column=2, padx=10, pady=10)
        self.button_4.grid(row=2, column=0, padx=10, pady=10)
        self.button_5.grid(row=2, column=1, padx=10, pady=10)
        self.button_6.grid(row=2, column=2, padx=10, pady=10)
        self.button_7.grid(row=3, column=0, padx=10, pady=10)
        self.button_8.grid(row=3, column=1, padx=10, pady=10)
        self.button_9.grid(row=3, column=2, padx=10, pady=10)
        self.button_0.grid(row=4, column=1, padx=10, pady=10)

        # Operator Buttons
        self.button_add = tk.Button(self.master, text='+', width=7, height=2, command=lambda: self.button_click('+'))
        self.button_subtract = tk.Button(self.master, text='-', width=7, height=2, command=lambda: self.button_click('-'))
        self.button_multiply = tk.Button(self.master, text='*', width=7, height=2, command=lambda: self.button_click('*'))
        self.button_divide = tk.Button(self.master, text='/', width=7, height=2, command=lambda: self.button_click('/'))
        self.button_equal = tk.Button(self.master, text='=', width=7, height=2, command=self.calculate)
        self.button_clear = tk.Button(self.master, text='Clear', width=7, height=2, command=self.clear)

        # Layout Operator Buttons
        self.button_add.grid(row=1, column=3, padx=10, pady=10)
        self.button_subtract.grid(row=2, column=3, padx=10, pady=10)
        self.button_multiply.grid(row=3, column=3, padx=10, pady=10)
        self.button_divide.grid(row=4, column=3, padx=10, pady=10)
        self.button_equal.grid(row=4, column=2, padx=10, pady=10)
        self.button_clear.grid(row=4, column=0, padx=10, pady=10)

    def button_click(self, number):
        current = self.display.get()
        self.display.delete(0, tk.END)
        self.display.insert(0, str(current) + str(number))

    def clear(self):
        self.display.delete(0, tk.END)

    def calculate(self):
        try:
            value = eval(self.display.get())
            self.clear()
            self.display.insert(0, value)
        except:
            self.clear()
            self.display.insert(0, 'Error')


root = tk.Tk()
app = Calculator(root)
root.mainloop()

在这里插入图片描述

07 | 💷 写在最后 \color{purple}{写在最后} 写在最后💷

学习Python GUI编程可以掌握基本的图形界面设计技能,能够开发出各种有趣的应用程序,比如桌面应用程序、游戏、工具等等,以下是今天学习GUI编程的一些总结:

  1. 学习Python的GUI编程,需要先掌握Python的基础语法和函数库的使用。

  2. Tkinter是Python的标准GUI库,有很多教程和文档可以学习。如果希望做一些复杂的交互,可以使用第三方库PyQt或wxPython。

  3. 学习GUI编程的核心技能在于掌握各种组件的使用和布局方式的选择。常见的组件包括按钮、标签、文本框、列表框、下拉框等等。

  4. 学习GUI编程需要多写代码多实践,可以参考各种开源项目,也可以自己动手实现一些小型应用。

  5. GUI编程中需要非常注重用户体验和界面设计,需要考虑不同分辨率、不同操作系统、不同用户的使用习惯等等因素。

总之,学习Python的GUI编程可以帮助我们掌握很多有用的开发技能,也可以让应用程序拥有更好的界面和交互体验。
最后希望大家能一起学习,加油进步,也希望大佬们能看下我的代码还有哪里可以继续改进的地方。
如果本篇文章对你有所帮助的话,请给我一个三连支持哦,谢谢各位大佬的观看,下期再见啦了ヾ(≧▽≦*)o

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

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

相关文章

ESP32在linux下烧录,提示权限有问题,解决方法

执行idf.py -p /dev/ttyACM0 flash下载时&#xff0c;提示这个错误 serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: /dev/ttyACM0 解决方法&#xff1a; 1检查串行端口 /dev/ttyUSB0 是否已被其他程序占用…

神经网络的梯度检查

当编写完一个深层的网络时&#xff0c;可能求导方式过于复杂稍微不小心就会出错&#xff0c;在开始训练使用这个网络模型之前我们可以先进行梯度检查。 梯度检查的步骤如下&#xff1a; 然后反向传播计算loss的导数grad&#xff0c;用以下公式计算误差&#xff1a; 通常来说&…

超星学习通小助手多线程工具Python

话不多说&#xff0c;直接开始&#xff0c;不会安转的直接使用后面两款&#xff0c;下载直接打开exe运行 第一款&#xff1a;网课小助手python&#xff0c;需要自行安装Python环境&#xff08;支持Windows、Mac、Linux各种环境&#xff09; https://wwiv.lanzoul.com/ifVrC0vk…

【K8s】控制器

文章目录 一、认识Pod控制器1、控制器介绍2、控制器种类 二、ReplicaSet&#xff08;RS&#xff09;1、RS的作用与资源清单2、创建RS3、pod扩缩容4、镜像升级5、删除RS 三、Deployment&#xff08;Deploy&#xff09;1、作用与资源清单2、创建deploy3、扩缩容4、镜像更新5、版本…

Vite 是如何站在巨人的肩膀上实现的

所谓的巨人&#xff0c;指的就是 Vite 底层所深度使用的两个构建引擎——Esbuild和Rollup。这两个构建引擎对于 Vite 来说究竟有多重要呢&#xff1f;在 Vite 的架构中&#xff0c;这两者各自扮演了什么样的角色&#xff1f;接下来&#xff0c;我们一起拆解 Vite 的双引擎架构&…

瑞吉外卖项目笔记02——员工管理、设置公共字段自动填充

三、员工信息管理 3.1 添加员工 注意&#xff1a;在设计数据库表字段时&#xff0c;给userName添加了唯一索引&#xff08;所以员工用户名是无法重复的&#xff09; 流程&#xff1a; 前端页面发送POST请求&#xff0c;后端接收到请求和数据&#xff0c;将用户数据添加到数…

PyQt5桌面应用开发(14):数据库+ModelView+QCharts

本文目录 PyQt5桌面应用系列下一个玩具报表一&#xff1a;Markdown文档的列表显示Widget的树、表、列报表Qt中的MVC框架模型视图代理 报表二&#xff1a;Markdown文档的长度图形数据&#xff1a;Markdown文档和Sqlite数据库代码总结 PyQt5桌面应用系列 PyQt5桌面应用开发&#…

FE_Vue学习笔记 框架的执行流程详解

1 分析脚手架结构 &#xff08;1&#xff09;CLI就是 command line interface 的缩写。Vue CLI官网&#xff1a;Vue CLI &#xff08;2&#xff09;安装过程&#xff1a; &#xff08;PS&#xff1a; 提前安装过node.js了&#xff0c;没有安装的可以打开这个&#xff1a;Downl…

Flutter - 搭建引擎调试环境(iOS)

文章目录 前言开发环境安装依赖环境1. python32. depot_tools 获取引擎项目1. 创建engine空目录2. 创建.gclient文件并配置3. 指定引擎版本4. 同步引擎源码 搭建调试环境1. 构建编译1.1 生成构建所需文件1.1.1 主机端1.1.2 iOS端 1.2 完成构建编译 2. Xcode调试2.1 设置本地引擎…

Qt扫盲-QAreaSeries理论总结

QAreaSeries理论总结 一、概述二、使用1. 创建QAreaSeries 对象2. 填充数据3. 设置区域4. 将面积图 与绘图设备关联5. 将绘图设备与 GUI窗口关联 一、概述 QAreaSeries类以面积图的形式显示数据。QAreaSeries用于显示定量数据。它基于QLineSeries 类&#xff0c;边界线条之间的…

二、Docker在Linux下的安装

文章目录 Docker在Linux下的安装Docker安装的前提环境安装1. 卸载旧的版本2. 安装yum-utils包3. 设置镜像的仓库4. 安装Docker相关的内容 启动Docker运行hello-world查看下载的hello-world镜像 了解卸载Docker Docker在Linux下的安装 Docker安装的前提环境 CentOS Docker 安装…

【LLM系列之PaLM】PaLM: Scaling Language Modeling with Pathways

论文题目&#xff1a;《Scaling Instruction-Finetuned Language Models》 论文链接&#xff1a;https://arxiv.org/abs/2204.02311 github链接1&#xff1a;https://github.com/lucidrains/PaLM-pytorch/tree/main; github链接2:https://github.com/conceptofmind/PaLM huggin…

每天一个提高效率的Matlab编程小技巧(1)-dbstop if error

相信在matlab调试程序的时候都遇到过这种情况&#xff1a;运行程序时命令行报错&#xff0c;而且出错的位置在我们自己定义的函数里&#xff0c;比如下面这个例子&#xff1a; 主函数main.m: a[1 2 3]; b[4 5]; csum_squares(a,b); 子函数sum_squares.m function csum_squa…

AI孙燕姿 ?AI东雪莲 !—— 本地部署DDSP-SVC一键包,智能音频切片,本地训练,模型推理,为你喜欢的角色训练AI语音模型小教程

目录 感谢B站UP羽毛布团 演示视频 稻香——东雪莲 虚拟——东雪莲 反方向的钟——东雪莲 晴天龙卷风——东雪莲 DDSP-SVC 3.0 (D3SP) 是什么&#xff1f; 下载资源&#xff1a; 解压整合包 准备数据集 智能音频切片 数据集准备 填写训练设置和超参数 开始训练 推…

这个抓包工具太强了,科来网络分析系统强烈推荐

一直以来抓包工具&#xff0c;都推荐和使用wireshark&#xff0c;简单好用。最近发现一款更强大好用的网络分析工具&#xff0c;科来网络分析系统。且技术交流版是完全免费的&#xff0c;无需注册激活。这里强烈推荐和分享给大家。这可是个网络报文分析和监控神器。有多强大&am…

【CSS系列】第七章 · CSS盒子模型,看这一篇就够了

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

Protobuf-net3.2.8中的protogen.exe之使用

目录 protobuf是个好东西 遇到问题 顺便研究一下命令行程序如何调试 protobuf是个好东西 protobuf是一个轻量级的数据格式&#xff0c;相比json&#xff0c;它的数据量为json的1/3&#xff0c;且存储方式为2进制&#xff0c;并进行了压缩&#xff0c;序列化和反序列化更快&…

效率与性能并存——离不开 Visual Studio Code 的前端开发与我

文章目录 &#x1f4cb;前言&#x1f3af;题外话&#xff1a;我与 VSCode 的那些事&#x1f3af;VSCode 的强大之处&#x1f9e9;VSCode 的诞生&#x1f9e9;VSCode 的一些功能 &#x1f3af;优与劣&#xff08;简单小结&#xff09;&#x1f4dd;最后 &#x1f4cb;前言 许久…

JVM 原理简介

JVM一直是java知识里面进阶阶段的重要部分&#xff0c;如果希望在java领域研究的更深入&#xff0c;则JVM则是如论如何也避开不了的话题&#xff0c;本系列试图通过简洁易读的方式&#xff0c;讲解JVM必要的知识点。 运行流程 我们都知道java一直宣传的口号是&#xff1a;一次编…

股票K线基础知识1

K线图 K线图是反映价格在某一时间周期内波动情况的图表&#xff0c;它由开盘价、收盘价、最高价、最低价四个要素构成&#xff0c;若当日收盘价高于开盘价&#xff0c;这表明价格处于上涨状态&#xff0c;此时K线图多用红色表示&#xff1b;若当日收盘价低于开盘价&#xff0c…