当前位置: 首页 > news >正文

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.
'''

逻辑

  1. 比较运算,位运算,赋值运算
  2. 逻辑运算:与(and)、或(or)和非(not)
  3. 成员运算:在序列(字符串、列表、元组)中检查成员(in 和 not in)
  4. 身份运算:检查对象是否是同一个(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端产品经理学习-对用户进行需求挖掘

目录&#xff1a; 用户需求挖掘的方法 举例&#xff1a;汽车销售系统的用户访谈-前期准备 用户调研提纲 预约用户做访谈 用户访谈注意点 我们对于干系人做完调研之后需要对用户进行调研&#xff1b;在C端产品常见的用户调研方式外&#xff0c;对B端产品仍然适用的 用户需…...

高清网络视频监控平台的应用-城市大交通系统视联网

目 录 一、应用需求 二、系统架构设计 三、功能介绍 1.实时视频监控 2.云台控制 3.语音功能 4. 录像管理与回放 5.告警联动 6.多种显示终端呈现 &#xff08;1&#xff09;CS客户端 &#xff08;2&#xff09;web客户端 &#xff08;3&#xf…...

java设计小分队01

1.开发流程&#xff1a; 编辑&#xff1a;生成.java文件编译&#xff1a;javac命令&#xff0c;生成.class文件运行&#xff1a;java命令 2.标识符下列那个&#xff08;不&#xff09;合法&#xff1a; 除了第一个词小写&#xff0c;其他词首字母大写&#xff1b;java标识符为…...

instant ngp win11 安装笔记

目录 训练保姆级教程: instant ngp安装参考&#xff1a; 编译步骤1 编译步骤2 我把编译成功的库分享到百度网盘了 训练保姆级教程: 英伟达NeRF项目Instant-ngp在Windows下的部署&#xff0c;以及数据集的制作&#xff08;适合小白的保姆级教学&#xff09;_colmap2nerf.p…...

Microsoft Word去除页面多余的换行符

大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样&#xff0c;虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示...

[Javaweb/LayUI/上机考试作业/开源]学生/图书/课程/仓库等管理系统六合一基础功能通用模板

展示 考试要求 给定用户表和六张图书/教师/顾客/仓库....的表&#xff08;随机给每人抽选&#xff09;&#xff0c;要求实现用户登录注册&#xff0c;异步更新&#xff0c;对物品增删改查&#xff0c;精确/模糊查询等。 环境 tomcat 9 mysql 8 java 17 项目结构 项目类图 写前…...

完善 Golang Gin 框架的静态中间件:Gin-Static

Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架&#xff0c;但是生态中的 Static 中间件使用起来却一直很不顺手。 所以&#xff0c;我顺手改了它&#xff0c;然后把这个改良版开源了。 写在前面 Gin-static 的改良版&#xff0c;我开源在了 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问世之前&#xff0c;其实已经有了分布式计算&#xff0c;只是那个时候的分布式计算都是专用的系统&#xff0c;只能专门处理某一类计算&#xff0c;比如进行大规模数据的排序。 很显然&#xff0c;这样的系统无法复用到其他的大数据计算场景&#xff0c;每一种应用都…...

ubuntu 如何放开防火墙端口,ubuntu 防火墙操作命令,ubuntu 防火墙全面操作说明

本文介绍了Ubuntu操作系统有关防火墙操作的命令。为了便于说明&#xff0c;请使用 root 用户或具有超级管理员权限的用户登录到 Ubuntu 系统&#xff0c;这样操作命令前就不需要加 sudo了。 一、安装防火墙 如果没有安装防火墙&#xff0c;请用如下命令安装&#xff1a; apt …...

计算机视觉入门与调优

大家好啊&#xff0c;我是董董灿。 在 CSDN 上写文章写了有一段时间了&#xff0c;期间不少小伙伴私信我&#xff0c;咨询如何自学入门AI&#xff0c;或者咨询一些AI算法。 90%的问题我都回复了&#xff0c;但有时确实因为太忙&#xff0c;没顾得过来。 在这个过程中&#x…...

Ndk编译hevc静态库

源码下载: https://hg.videolan.org/x265 然后执行以下脚本: #!/bin/bash# 设置NDK路径&#xff0c;根据你的实际安装路径修改 NDK_PATH/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e# 设置目标平台和ABI版本&#xff0c;可以根据实际情况修改 aarch64-linux-…...

Linux系统安装MySQL

Linux系统安装MySQL 第一步&#xff1a;下载YUM wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm第二步&#xff1a;安装MySQL的YUM 仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm第三步&#xff1a;查看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/不出意外&#xff0c;$GOPATH/bin下 已经有了swag 初…...

高效分割视频:批量剪辑,轻松提取m3u8视频技巧

在数字媒体时代&#xff0c;视频分割是一项常见的需求。无论是为了编辑、分享还是其他要求&#xff0c;经常要将长视频分割成多个短片。传统的视频分割方法往往需要手动操作&#xff0c;既耗时又容易出错。现在来看云炫AI智剪高效分割视频的方法&#xff0c;批量剪辑并轻松提取…...

自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程

随着移动互联网的普及&#xff0c;预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养&#xff0c;预约已经渗透到各个行业。然而&#xff0c;市面上的预约小程序大多功能单一&#xff0c;界面老旧&#xff0c;无法满足商家和用户的个性化需求。今天来给大…...

el-select 多选,选有一个未选择的选项

多选有未选择这个选项后。会出现一个情况&#xff0c;绑定的数据为[‘未选择’,‘cpu1’,‘cpu2’] 进行一个处理&#xff0c;选择&#xff08;未选择&#xff09;就清除&#xff08;其它的选择&#xff09;&#xff0c;选择&#xff08;cpu&#xff09;就清除&#xff08;未选…...

CISSP 第6章: 密码学与对称加密算法

第六章 密码学与对称加密算法 6.1 密码学历史上的里程碑 6.1.1 凯撒密码 简单的将字母表中的每个字母替换成其后的三个字母&#xff0c;是单一字母的替代置换密码 6.1.2 美国内战 美国内战使用词汇替代和置换的复杂组合&#xff0c;从而试图破坏敌人的破译企图 6.1.3 Ultra与…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...