Python基础语法笔记 tkinter的简单使用
语法
物质
动态类型语言,不需要声明类型
数字
类型int float bool
操作 //整除 **幂
字符串
str1 = "Hello python"
str2 = "world"
print(str1 * 3) # 重复输出
print(str1[1]) # 索引访问
print(str1 + " " + str2) # 拼接
print(str1[2:4]) # 字符串切片
print(len(str1)) # 长度
#查找与替换
print(str1.find("python")) # 查找
print(str1.replace("python", "c++")) # 替换
print(str1.split(" ")) # 以关键字划分
print(str2.upper()) # 大小写lower/upper
数组类
列表和元组
list = [1, 2, 3, 4] #列表
tuple = (1, 2, 3, 4) #元组
#列表内容可变,元组不可变
列表的操作
arr = ["apple", "banana", "cherry"]
#添加元素
arr.append("orange") # 在末尾追加元素
arr.insert(1, "pear") # 在第2个位置插入元素
print(arr)
#删除元素
arr.remove("banana") # 删除指定元素
del arr[1] # 删除指定位置的元素
print(arr)
#查找元素
print(arr.index("apple")) # 查找指定元素的索引位置,没找到抛出异常
print("pear" in arr) # 判断指定元素是否在数组中
集合
#集合内不允许重复元素
A = {1, 2, 3}
B = {2, 3, 4}
A & B #{2, 3}
A | B #{1, 2, 3, 4}
A - B #{1}
A ^ B #{1, 4}
A <= B #False
length = len(A);
字典
#就是键值对
person = {'name': 'John Doe', 'age': 30, 'gender': 'Male'}
print(person['name']) # John Doe
类与特殊方法
from filecmp import cmpclass Book:def __init__(self, title, author, pages):self.title = titleself.author = authorself.pages = pagesdef __str__(self):return f"{self.title} by {self.author}"def __repr__(self): # representationreturn f"Book('{self.title}', '{self.author}', {self.pages})"def __len__(self):return self.pagesdef __add__(self, other):return self.pages + other.pagesdef __eq__(self, other):return (self.title == other.titleand self.author == other.authorand self.pages == other.pages)book1 = Book("The Great Gatsby", "F. Scott Fitzgerald", 180)
book2 = Book("To Kill a Mockingbird", "Harper Lee", 198)print(book1)
# Output: The Great Gatsby by F. Scott Fitzgeraldprint(repr(book1))
# Output: Book('The Great Gatsby', 'F. Scott Fitzgerald', 180)print(book1 + book2)
# Output: 378print(book1 == book2)
# Output: Falseprint(book1 == Book("The Great Gatsby", "F. Scott Fitzgerald", 180))
# Output: True
运动
输入输出
输入
name = input("Please enter your name: ")
#输入
n = int(input())#默认输入尾string类型,可以格式化为int,float
print("Hello, " + name)
sets = set(input('|').split()[1:])#获取以|分割后的第二个至行尾的所有单词nums = input().split() # 将字符串分割成多个子串
arr = [float(x) for x in nums] # 将每个子串转换成浮点数类型,得到一个浮点数列表
输出
# 普通输出
print("Hello, World!")
# python的每句print自动换行,不需要换行则加end
print("Hello, World!", end="")
print(" Welcome to Python.")
# 格式化输出
name = "John"
age = 30
## 三种格式化
print("My name is {} and I am {} years old.".format(name, age))
print(f"My name is {name} and I am {age} years old.") #Python 3.6引入
print("My name is %s and I am %d years old." % (name, age))
## 控制小数位数
value = 3.1415926
print("The value of pi is {:.2f}.".format(value))
##占位长度以及左右对齐
print("My name is {:10} and I am {:<10} years old.".format(name, age))
'''输出如下
Hello, World!
Hello, World! Welcome to Python.
My name is John and I am 30 years old.
My name is John and I am 30 years old.
My name is John and I am 30 years old.
The value of pi is 3.14.
My name is John and I am 30 years old.
'''
逻辑
- 比较运算,位运算,赋值运算
- 逻辑运算:与(and)、或(or)和非(not)
- 成员运算:在序列(字符串、列表、元组)中检查成员(in 和 not in)
- 身份运算:检查对象是否是同一个(is 和 is not)
控制语句
for i in range(1, 11):if i == 5:continueprint(i)
while True:user_input = input("请输入任意字符,输入'q'退出: ")if user_input == "q":breakprint("你输入的字符是: " + user_input)
单条件 类似于 c语言中的? :
x = 10
y = 20
max_value = x if x > y else y
print(max_value) # 输出结果为20
函数
#定义计算平方的函数
def square(x):result = x * xreturn result
列表推导式
square_list = [x**2 for x in range(1, 11)]
print(square_list)
#输出如下[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]#统计数组中的重复数字个数
len(set([x for x in nums if x != 0]))#每个单词的第一个数字
words = ["apple", "banana", "cherry", "dragonfruit", "elderberry", "fig"]
first_letters = {word[0] for word in words}
print(first_letters)
#输出如下{'c', 'b', 'a', 'e', 'd', 'f'}
应用
打包
先安装pip install pyinstaller
然后pyinstaller --onefile -w D:\code\scripts\py\learn.py
打包并包含库文件,并隐藏命令行窗口
虚拟环境
使用虚拟环境打包可以让可执行文件更小
使用python3.6以上自带的venv,在vscode的PS终端中执行以下命令
#创建虚拟环境
python -m venv test_env
#激活环境
.\test_env\Scripts\Activate.ps1#执行不了就先Set-ExecutionPolicy RemoteSigned
#然后安装包
pip list#查看
pip install pandas#安装
#退出环境
deactivate
Tkinter
界面
基于tkinter,需要先安装库pip install ttkbootstrap tkinter
布局
三种布局方式:
pack相对用户来说不需要做过多操作就可以自动元素排列,适合于整体布局
grid布局相对来说有板有眼,适合那种规规矩矩的布局
place布局适合那种对细节要求严丝合缝的场合
pack
widgets.pack(pack_options) 这个是函数原型,pack_options有三个常用属性,分别是expand ,fill,side这三个属性expand 是否扩展,当它设置为true的时候,它会沾满父组件的空间,当然,这是在其它同级元素布局剩下之后的空间。
fill 是填充的意思,它可以指定填充的方向,比如我们想要一个button或者label占满一行,我们可以就可以设置fill = tk.X (其中tk是tkiner的简写,import tkinter as tk)
side是一侧的意思,比如我们要让两个button并排显示可以一个设置side=tk.LEFT,一个设置为tk.RIGHT
pdx,pdy是用来设置距离左右上下的位置的,有了他们,我们就可以灵活设置组件的布局了
示例
import tkinter as tk
root = tk.Tk()
root.title(u"pack布局演示")
tk.Button(root, text="side:top").pack(side='top')
tk.Button(root, text="side:bottom").pack(side='bottom')
tk.Button(root, text="side:left").pack(side='left')
tk.Button(root, text="side:right").pack(side='right')
root.mainloop()
grid
grid有4个可选参数,分别是row,rowspan,column,columnspan,stickyrow指的是排在第一行
rowspan指的是占有多少行
column指的是排在第几列
columnspan指的是占有几列
sticky粘性,指的就是对齐固定方式,有nswe4个方位,分别是上北下南左西右东(n=nouth,s=south,e=east,w=west)
示例
import tkinter as tk
root = tk.Tk()
root.title(u"grid布局演示")
for row in range(3):for col in range(4):text_ = "row=%d, col=%d" % (row, col)tk.Button(root, text=text_).grid(row=row, column=col)
root.mainloop()
place
坐标布局使用place进行元素的位置放置,它有x,y两参数,可以用来指定距离父组件的左上角的横坐标距离和纵坐标距离。
实战
一个利用tkinter实现逐差法,和作散点图
另外还有更换背景功能
import tkinter as tk
from ttkbootstrap import Style
from tkinter import messagebox
from PIL import Image, ImageTk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import osdata = []def background(window):def resize_image():new_width = window.winfo_width()new_height = window.winfo_height()resized_image = original_image.resize((new_width, new_height))new_photo = ImageTk.PhotoImage(resized_image)background_label.config(image=new_photo)background_label.image = new_photocurrent_path = os.path.realpath(__file__)current_directory = os.path.dirname(current_path)jpg_path = os.path.join(current_directory, "background.jpg")original_image = Image.open(jpg_path)photo = ImageTk.PhotoImage(original_image)background_label = tk.Label(window, image=photo)background_label.place(x=0, y=0, relwidth=1, relheight=1) # 设置Label的相对大小,使其铺满整个窗口window.bind("<Configure>", lambda event: resize_image())def create_input(window, text, data_var):data_frame = tk.Frame(window)data_label = tk.Label(data_frame, text=text, font=("Arial", 16), width=15)data_label.pack(side=tk.LEFT)data_entry = tk.Entry(data_frame, textvariable=data_var)data_entry.pack(side=tk.LEFT)# return data_framedata_frame.pack()def create_window(text, command):tk.Button(root, text=text, font=("Arial", 30), width=10, height=2, command=command).pack(pady=10)def full_window(window):w = window.winfo_screenwidth()h = window.winfo_screenheight()window.geometry("%dx%d" % (w, h))def create_button(window, text, command):tk.Button(window, text=text, font=("Arial", 16), width=12, height=1, command=command).pack(pady=10)def create_table(num, table_frame):try:global datadata.clear()rows = (num + 9) // 10cols = min(num, 10)for i in range(rows):row = []if i == rows - 1 and num % 10 != 0:cols = num % 10for j in range(cols):entry = tk.Entry(table_frame, width=6)entry.grid(row=i, column=j)row.append(entry)data.append(row)except ValueError:messagebox.showerror("错误", "请输入有效的数据个数!")def center_window(root, width, height):screenwidth = root.winfo_screenwidth() # 获取显示屏宽度screenheight = root.winfo_screenheight() # 获取显示屏高度size = "%dx%d+%d+%d" % (width,height,(screenwidth - width) / 2,(screenheight - height) / 2,) # 设置窗口居中参数root.geometry(size)def sub_window_style(window):# window.title()center_window(window, 800, 600)background(window)def diff():def calc():try:global datanums = [float(entry.get()) for row in data for entry in row]n2 = len(nums)n = n2 // 2print(n)result = sum([nums[i + n] - nums[i] for i in range(n)]) / (n * n)result_text.insert(tk.END, f"逐差法结果为:{result}\n")except ValueError:messagebox.showerror("错误", "表格中存在非数字的输入!")window = tk.Toplevel(root)sub_window_style(window)data_N = tk.IntVar()create_input(window, "数据个数:", data_N)table_frame = tk.Frame(window)create_button(window, text="生成表格", command=lambda: create_table(data_N.get(), table_frame))table_frame.pack()create_button(window, text="计算", command=calc)result_text = tk.Text(window, height=30, width=45)result_text.pack()def plot():def gen_table(num, table_frame):global datadata.clear()rows = 2cols = numfor i in range(rows):row = []for j in range(cols):entry = tk.Entry(table_frame, width=6)entry.grid(row=i, column=j)row.append(entry)data.append(row)def calc():try:global datax = [float(entry.get()) for entry in data[0]]y = [float(entry.get()) for entry in data[1]]# 生成折线图plt.figure(figsize=(6, 4))plt.plot(x, y, marker="o", label="Data")plt.xlabel("X")plt.ylabel("Y")# plt.title("折线图")plt.legend()# 在tkinter窗口中显示折线图canvas = FigureCanvasTkAgg(plt.gcf(), master=window)canvas_widget = canvas.get_tk_widget()canvas_widget.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)except ValueError:messagebox.showerror("错误", "表格中存在非数字的输入!")window = tk.Toplevel(root)sub_window_style(window)# 创建输入data_N = tk.IntVar()create_input(window, "数据个数: ", data_N)table_frame = tk.Frame(window)create_button(window, "生成表格", lambda: gen_table(data_N.get(), table_frame))table_frame.pack()create_button(window, "生成折线图", lambda: calc())style = Style(theme="darkly")
root = style.master
root.title("主窗口")
full_window(root)background(root)create_window("逐差法", lambda: diff())
create_window("作图", lambda: plot())
root.mainloop()
相关文章:
Python基础语法笔记 tkinter的简单使用
语法 物质 动态类型语言,不需要声明类型 数字 类型int float bool 操作 //整除 **幂 字符串 str1 "Hello python" str2 "world" print(str1 * 3) # 重复输出 print(str1[1]) # 索引访问 print(str1 " " str2) # 拼接 print(str1[2…...
SSL/TLS 握手过程详解
SSL握手过程详解 1、SSL/TLS 历史发展2、SSL/TLS握手过程概览2.1、协商交换密码套件和参数2.2、验证一方或双方的身份2.3、创建/交换对称会话密钥 3、TLS 1.2 握手过程详解4、TLS 1.3 握手过程详解5、The TLS 1.2 handshake – Diffie-Hellman Edition 1、SSL/TLS 历史发展 可…...
B端产品经理学习-对用户进行需求挖掘
目录: 用户需求挖掘的方法 举例:汽车销售系统的用户访谈-前期准备 用户调研提纲 预约用户做访谈 用户访谈注意点 我们对于干系人做完调研之后需要对用户进行调研;在C端产品常见的用户调研方式外,对B端产品仍然适用的 用户需…...
高清网络视频监控平台的应用-城市大交通系统视联网
目 录 一、应用需求 二、系统架构设计 三、功能介绍 1.实时视频监控 2.云台控制 3.语音功能 4. 录像管理与回放 5.告警联动 6.多种显示终端呈现 (1)CS客户端 (2)web客户端 (3…...
java设计小分队01
1.开发流程: 编辑:生成.java文件编译:javac命令,生成.class文件运行:java命令 2.标识符下列那个(不)合法: 除了第一个词小写,其他词首字母大写;java标识符为…...
instant ngp win11 安装笔记
目录 训练保姆级教程: instant ngp安装参考: 编译步骤1 编译步骤2 我把编译成功的库分享到百度网盘了 训练保姆级教程: 英伟达NeRF项目Instant-ngp在Windows下的部署,以及数据集的制作(适合小白的保姆级教学)_colmap2nerf.p…...
Microsoft Word去除页面多余的换行符
大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样,虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示...
[Javaweb/LayUI/上机考试作业/开源]学生/图书/课程/仓库等管理系统六合一基础功能通用模板
展示 考试要求 给定用户表和六张图书/教师/顾客/仓库....的表(随机给每人抽选),要求实现用户登录注册,异步更新,对物品增删改查,精确/模糊查询等。 环境 tomcat 9 mysql 8 java 17 项目结构 项目类图 写前…...
完善 Golang Gin 框架的静态中间件:Gin-Static
Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架,但是生态中的 Static 中间件使用起来却一直很不顺手。 所以,我顺手改了它,然后把这个改良版开源了。 写在前面 Gin-static 的改良版,我开源在了 soulteary/gin-static&a…...
html websocket的基本使用
html websocket的基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"w…...
大数据 MapReduce是什么?
在Hadoop问世之前,其实已经有了分布式计算,只是那个时候的分布式计算都是专用的系统,只能专门处理某一类计算,比如进行大规模数据的排序。 很显然,这样的系统无法复用到其他的大数据计算场景,每一种应用都…...
ubuntu 如何放开防火墙端口,ubuntu 防火墙操作命令,ubuntu 防火墙全面操作说明
本文介绍了Ubuntu操作系统有关防火墙操作的命令。为了便于说明,请使用 root 用户或具有超级管理员权限的用户登录到 Ubuntu 系统,这样操作命令前就不需要加 sudo了。 一、安装防火墙 如果没有安装防火墙,请用如下命令安装: apt …...
计算机视觉入门与调优
大家好啊,我是董董灿。 在 CSDN 上写文章写了有一段时间了,期间不少小伙伴私信我,咨询如何自学入门AI,或者咨询一些AI算法。 90%的问题我都回复了,但有时确实因为太忙,没顾得过来。 在这个过程中&#x…...
Ndk编译hevc静态库
源码下载: https://hg.videolan.org/x265 然后执行以下脚本: #!/bin/bash# 设置NDK路径,根据你的实际安装路径修改 NDK_PATH/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e# 设置目标平台和ABI版本,可以根据实际情况修改 aarch64-linux-…...
Linux系统安装MySQL
Linux系统安装MySQL 第一步:下载YUM wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm第二步:安装MySQL的YUM 仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm第三步:查看MySQL版本 yum repolist …...
linux go环境安装 swag
下载依赖包 go get -u github.com/swaggo/swag编译 移动到下载的swag包目录,一般在$GOPATH/pkg/mod下 查看 GOPATH echo $GOPATHcd /root/GolangProjects/pkg/mod/github.com/swaggo/swagv1.16.2go install ./cmd/swag/不出意外,$GOPATH/bin下 已经有了swag 初…...
高效分割视频:批量剪辑,轻松提取m3u8视频技巧
在数字媒体时代,视频分割是一项常见的需求。无论是为了编辑、分享还是其他要求,经常要将长视频分割成多个短片。传统的视频分割方法往往需要手动操作,既耗时又容易出错。现在来看云炫AI智剪高效分割视频的方法,批量剪辑并轻松提取…...
自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程
随着移动互联网的普及,预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养,预约已经渗透到各个行业。然而,市面上的预约小程序大多功能单一,界面老旧,无法满足商家和用户的个性化需求。今天来给大…...
el-select 多选,选有一个未选择的选项
多选有未选择这个选项后。会出现一个情况,绑定的数据为[‘未选择’,‘cpu1’,‘cpu2’] 进行一个处理,选择(未选择)就清除(其它的选择),选择(cpu)就清除(未选…...
CISSP 第6章: 密码学与对称加密算法
第六章 密码学与对称加密算法 6.1 密码学历史上的里程碑 6.1.1 凯撒密码 简单的将字母表中的每个字母替换成其后的三个字母,是单一字母的替代置换密码 6.1.2 美国内战 美国内战使用词汇替代和置换的复杂组合,从而试图破坏敌人的破译企图 6.1.3 Ultra与…...
《深入理解C++11:C++11新特性解析与应用》笔记八
第八章 融入实际应用 8.1 对齐支持 8.1.1 数据对齐 c可以通过sizeof查询数据的长度,但是没有对对齐方式有关的查询或者设定进行标准化。c11标准定义的alignof函数可以查看数据的对齐方式。 现在的计算机通常会支持许多向量指令,4组8字节的浮点数据&a…...
算法——BFS解决FloodFill算法
什么是FloodFill算法 中文:洪水灌溉。假设这一块4*4的方格是一块土地,有凸起的地方,也有凹陷的地方(凹陷的地方用负数表示)。此时下大雨发洪水,会把凹陷的地方填满。绿色圈起来的属于一块区域(…...
【Linux】常用的基本命令指令②
前言:前面我们学习了Linux的部分指令,今天我们将接着上次的部分继续将Linux剩余的基本指令. 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:Linux的学习 👈 💯代码仓库:卫卫周大胖的学习日记…...
52、全连接 - 特征与样本空间的对应关系
上一节说到经过全连接层之后,神经网络学习到的特征,会从隐层特征空间逐步映射到样本空间,这主要是由于全连接层可以融合全局的特征。 在经过全连接层之后,在 ResNet50 这个神经网络中会输出1000个特征的得分值,这1000个特征的得分值,便可以对应到图像的分类。 怎么对应…...
Go语言中的包管理工具之Go Vendor的使用
GoLang 中常用的包管理的方式 常用的有三种 Go PathGo VendorGo Modules 关于 Go Vender 1 )概述 在2015年的时候,我们的另一个包管理工具Go Vendor就诞生了它诞生于 2015.8.19 ,是在Go的 1.5 版本当中引入的,它默认是关闭的我…...
QString设置小数点精度位数
QString设置小数点精度位数 Chapter1 QString设置小数点精度位数Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理问题一:QString.toDouble有效位只有6位问题二:小数点有效位数的问题 Chapter3 qt QString转Double只显示6位数字的问题(精…...
基于Java驾校预约管理系统
基于Java的驾校预约管理系统是一个为驾校提供在线预约服务的系统。该系统利用Java编程语言,采用SSM框架,并使用MySQL数据库进行开发。 这个系统主要有三个角色:用户、教练和管理员。 用户可以注册和登录系统,查看驾校的公告信息…...
C++面向对象高级编程(侯捷)笔记2
侯捷C面向对象高级编程 本文是学习笔记,仅供个人学习使用,如有侵权,请联系删除。 如果你对C面向对象的组合、继承和委托不了解,对什么是拷贝构造、什么是拷贝赋值和析构不清楚,对类设计中的Adapter、pImpl、Template…...
双曲正弦函数(*) 优化麦克劳林公式
#include<stdio.h> #include<math.h> int main() {double x,eps,i3,y,item;scanf("%lf%lf",&x,&eps);yx;itemx;while(fabs(item)>eps){itemitem*x*x/i/(i-1);i2;yitem;}printf("%.6f\n",y);return 0; }...
无监督关键词提取算法:TF-IDF、TextRank、RAKE、YAKE、 keyBERT
TF-IDF TF-IDF是一种经典的基于统计的方法,TF(Term frequency)是指一个单词在一个文档中出现的次数,通常一个单词在一个文档中出现的次数越多说明该词越重要。IDF(Inverse document frequency)是所有文档数比上出现某单词的个数,通常一个单词…...
iis网站开发教程/软文写作是什么意思
OpenCV Machine Learning 之 K最近邻分类器的应用下面的程序实现了对高斯分布的点集合进行分类的K最近令分类器#include "ml.h"#include "highgui.h"int main( int argc, char** argv ){const int K 10; //每个输入向量的邻居个数int i, j, k, accuracy;f…...
wordpress子菜单位置/最经典最常用的网站推广方式
一、copy 头文件algorithm template <class InputIterator, class OutputIterator>OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);复制元素范围 将[first,last]范围内的元素复制到从result开始的范围内。 该函数…...
郑州品牌网站建设官网/免费技能培训在哪里报名
目录 Kafka的基本介绍Kafka的设计原理分析Kafka数据传输的事务特点Kafka消息存储格式副本(replication)策略Kafka消息分组,消息消费原理Kafak顺序写入与数据读取消费者(读取数据) Kafka的基本介绍 Kafka是最初由Lin…...
求大神帮忙做网站/搜索引擎营销有哪些
JavaScript For 循环循环在编程中用于自动执行重复性任务。例如,假设我们要打印“ Hello World” 10次。可以如下所示进行:document.write("Hello World");document.write("Hello World");document.write("Hello World");…...
网页qq邮箱怎么发文件给别的邮箱/seo网站培训优化怎么做
(1)Javascript的变量命名需要注意的3点:1),变量以字母开头,中间可以出现数字或者下划线“_”字符。变量名不能有空格,“”,“-”,“,”等特殊字符。2…...
编写网站 语言/2023年适合小学生的新闻有哪些
我首先是安装lnmp一键包,里面有redis3.1.3的扩展包,cd lnmp1.4/src/redis3.1.3/执行phpize 生成配置,/usr/local/php7.15/bin/phpize然后 ./configure --with-php-config/usr/local/php7.15/bin/php-configmake&&make install查看redis.so文件是…...