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()

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

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

相关文章

MFC - 给系统菜单(About Dialog)发消息

文章目录 MFC - 给系统菜单(About Dialog)发消息概述笔记resource.h菜单的建立菜单项的处理MSDN上关于系统菜单项值的说法END MFC - 给系统菜单(About Dialog)发消息 概述 做了一个对话框程序, 在系统菜单(在程序上面的标题栏右击)中有"关于"的菜单. 这个是程序框架…

java常见面试题:请解释一下Java中的常用分布式框架,如Spring Boot、Dubbo等。

下面我将详细介绍Java中的两个常用分布式框架&#xff1a;Spring Boot和Dubbo。 1. Spring Boot Spring Boot是一个用于创建独立、可运行的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的创建和部署&#xff0c;使得开发人员能够专注于编写业务逻辑&#xff0c…

【MySQL】事务Transaction

1. 事务的概念 事务是什么 在业务逻辑中使用sql&#xff0c;面对一些较复杂的场景&#xff0c;是需要多个sql语句组合起来实现的。如&#xff1a;银行的转账业务&#xff0c;若客户A要转账100元给客户B&#xff0c;就要两条sql&#xff1a;A余额减100&#xff0c;B余额加100&a…

ES6语法(五)封装模块化公共工具函数、引入npm包 ,并上传到npm中进行下载

1. 模块化 模块化是指将一个大的程序文件&#xff0c;拆分为许多小的文件&#xff08;模块&#xff09;&#xff0c;然后将小的文件组合起来。 1.1. 优点 &#xff08;1&#xff09;防止命名冲突 &#xff08;2&#xff09;代码复用 &#xff08;3&#xff09;高维护性 &…

【CFP-专栏2】计算机类SCI优质期刊汇总(含IEEE/Top)

一、计算机区块链类SCI-IEEE 【期刊概况】IF:4.0-5.0, JCR2区&#xff0c;中科院2区&#xff1b; 【大类学科】计算机科学&#xff1b; 【检索情况】SCI在检&#xff1b; 【录用周期】3-5个月左右录用&#xff1b; 【截稿时间】12.31截稿&#xff1b; 【接收领域】区块链…

利用idea+ jclasslib插件查看和分析 Java 类文件的字节码

jclasslib介绍 jclasslib 插件是一个用于 IntelliJ IDEA 的工具&#xff0c;它允许开发者在集成开发环境&#xff08;IDE&#xff09;内直接查看和分析 Java 类文件的字节码。这个插件尤其对于想要深入了解 Java 字节码、类加载机制、以及 Java 虚拟机&#xff08;JVM&#xf…

MongoDB聚合:$replaceRoot

定义 $replaceRoot使用指定的文档替换输入文档。该操作可替换输入文档的所有字段&#xff0c;包括_id字段。可以将内嵌文档提升到顶层&#xff0c;可以为提升文档创建新文档。 注意&#xff1a; 从MongoDB4.2开始增加了$replaceWith&#xff0c;执行与$replaceRoot类似的动作…

网络基础操作练习

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 手把手教你操作华为设备&#xff0c;新手必看。 实验拓扑图 关于命令行视图 1&#xff09;用户视图 <Huawei> 2&#xff09;系统视图 [Hu…

C++初阶(类中的默认成员函数)

呀哈喽&#xff0c;我是结衣 今天给大家带来的是类里面的默认成员函数&#xff0c;一共有六个默认的成员函数哦&#xff0c;包括构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;运算符重载函数&#xff0c;const成员函数&#xff0c;那么正篇开始。 文章目…

java常见面试题:请解释一下Java中的常用网络协议,如HTTP、TCP/IP等。

Java是一种广泛使用的编程语言&#xff0c;它提供了丰富的库来支持各种网络协议&#xff0c;如HTTP、TCP/IP等。以下是这些协议的详细解释&#xff1a; HTTP (Hypertext Transfer Protocol)&#xff1a; 用途&#xff1a;HTTP是用于从服务器请求和发送网页的协议。当我们浏览网…

Go语言中的性能考虑和优化

优化您的Go代码以达到最佳性能 性能优化是软件开发的关键方面&#xff0c;无论您使用哪种编程语言。在这篇文章中&#xff0c;我们将探讨Go语言中的性能考虑和优化&#xff0c;Go是一种以其效率而著称的静态类型和编译语言。我们将深入探讨三个关键领域&#xff1a;分析并发代…

pytorch01:概念、张量操作、线性回归与逻辑回归

目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量&#xff1f;2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…

AutoSAR(基础入门篇)4.6-Autosar_BSW的Watchdog功能

Autosar_Watchdog功能 一、Autosar_BSW的Watchdog功能 1、Watchdog组件图 2、架构与术语解释 二、看门狗规范

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前文链接&#xff1a; ​​开源可观测性平台Signoz系列&#xff08;一&#xff09;【开篇】​​ ​​开源可观测性平台Signoz&…

CSS之元素转换

我想大家在写代码时有一个疑问&#xff0c;块级元素可以转换成其他元素吗&#xff1f; 让我为大家介绍一下元素转换 1.display:block(转换成块元素) display&#xff1a;block可以把我们的行内元素或者行内块元素转换成块元素 接下来让我为大家演示一下&#xff1a; <!DO…

tcpdump出现permission denied

在使用tcpdump -i eth0 src host 192.168.0.184 and ip and port 22 -nn -w ping.pacp命令抓包并把抓到的数据保存到ping.pacp时&#xff0c;出现了权限错误的报错。但实际上我这里用的是root用户执行的命令。 查阅man手册发现: 在tcpdump中&#xff0c;-Z选项用于在启动数据…

CSS 动态提示框

​​ <template> <div class"terminal-loader"><div class"terminal-header"><div class"terminal-title">提示框</div><div class"terminal-controls"><div class"control close"…

【Matlab】BP 神经网络时序预测算法

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88681507 一&#xff0c;概述 BP 神经网络是一种常见的人工神经网络&#xff0c;也是一种有监督学习的神经网络。其全称为“Back Propagation”&#xff0c;即反向传播算法。BP 神经网络主要由输入层、隐藏层…

网络通信之TCP和UDP-入门2

TCP/IP协议族为运输层指明了两个协议&#xff1a;TCP&#xff08;优点是可靠&#xff0c;缺点慢 &#xff09;和UDP&#xff08;优点快&#xff0c;缺点没有纠错&#xff09;&#xff0c;它们都是作为应同程序和网络操作的中介物。 TCP连接的建立和释放&#xff1a; https://zh…

SpringValidation自定义注解以及分组校验

SpringValidation的参数校验使用可参考&#xff1a;【SpringMVC应用篇】Spring Validation 参数校验-CSDN博客 目录 1. 引入依赖 2. 自定义注解校验 2.1 创建Validation类 2.2 创建注解对象 2.3 使用注解 3. 分组校验 3.1 实体类内部定义接口 3.2 在参数上指定分组 1. …