Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]

本文主要是介绍Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        本文继上篇文章http://t.csdnimg.cn/rrsIL继续介绍GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,目前博主处于有一点基础的状态。

        文章的主要介绍了依旧非常重要的结构tinkter库、重要组件简介(这个不用死记硬背 用的时候再说)、Text(多行文本框)、Radiobutton、Checkbutton、Canvas画布,依旧是很多代码部分是重复的,因为框架是固定的,跟着敲两遍就记住了,还是要动手。

感谢大佬持续支持!!既然路过就是缘分,点个赞吧!!!

目录

9.Text多行文本框详解_复杂tag标记

10.Radiobutton_Checkbutton详解

1. message简介

2. Radiobutton代码表示

3. Checkbutton代码表示

11.Canvas画布组件


9.Text多行文本框详解_复杂tag标记

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

# P9
from tkinter import *
import webbrowser
# Frame 是一个组件
class Application(Frame):def __init__(self,master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()
​def createWidget(self):self.w1 = Text(root,width=40,height=12,bg="gray")# 宽度20个字母(10个汉字),高度一个行高self.w1.pack()
​self.w1.insert(1.0,"0123456789\nabcdefg")self.w1.insert(2.3,"锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦")
​
​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,'ZMR')self.w1.insert(END,'[love]')
​def returnText(self):# Indexes(索引)是用来指向Text组件中文本的位置,Text的组件索引也是对应实际字符之间的位置。# 核心:行号以1开始,列号以0开始# self.w1.index(Indexes)self.w1.get(1.2,1.6)self.w1.insert(1.8,'wuuwwuuwu')print(f"所有文本内容:{self.w1.get(1.0,END)}")
​def addImage(self):# global photoself.photo = PhotoImage(file="img/01.gif")self.w1.image_create(END,image=self.photo)
​def addWidget(self):b1 = Button(self.w1,text='zmr')# 在text创建组件的命令self.w1.window_create(INSERT,window=b1)
​def testTag(self):self.w1.delete(1.0,END)self.w1.insert(INSERT,"hello python!")self.w1.tag_add("hello",background='yellow',foreground='red')
​self.w1.tag_add("baidu",2.0,2.5)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")
​
if __name__ == '__main__':# 创建根窗口对象root = Tk()root.geometry('500x300-100-200')app = Application(master=root)root.mainloop()  # 事件循环

10.Radiobutton_Checkbutton详解

1. message简介

messagebox在Python的Tkinter库中,指的是一个用于显示消息框的模块。这些消息框通常作为模态对话框出现,用于向用户显示信息、警告、错误或询问用户确认等。Tkinter的messagebox模块提供了多种类型的消息框,包括但不限于以下几种:

  1. 1. **showinfo**:显示一个带有确定按钮的信息框,用于向用户展示一般性的信息。
    ​
    2. **showwarning**:显示一个带有确定按钮的警告框,用于提醒用户注意某些可能的问题或风险。
    ​
    3. **showerror**:显示一个带有确定按钮的错误框,用于向用户报告程序执行过程中遇到的错误。
    ​
    4. **askquestion**:显示一个带有“是”和“否”按钮的询问框,用于询问用户对于某个问题的选择。
    ​
    5. **askokcancel**:显示一个带有“确定”和“取消”按钮的确认框,用于请求用户确认某个操作。
    ​
    6. **askyesno**:显示一个带有“是”和“否”按钮的确认框,类似于`askquestion`,但通常用于更简单的确认/取消场景。
    ​
    7. **askretrycancel**:显示一个带有“重试”和“取消”按钮的框,用于在用户执行某个可能失败的操作时提供重试的机会。
    ​
    使用`messagebox`模块时,首先需要从Tkinter库中导入它。然后,可以通过调用相应的函数并传入标题和消息内容来显示消息框。这些函数通常会返回一个值,表示用户的操作结果(如点击了哪个按钮)。
    ​
    需要注意的是,`messagebox`模块中的函数可以直接调用,无需创建Tk()对象或主循环,因为它们内部会处理这些事务。然而,在实际应用中,通常会将`messagebox`的使用与Tkinter的其他组件(如按钮、文本框等)结合起来,通过触发某个事件(如按钮点击)来显示消息框。
    ​
    此外,虽然`messagebox`模块提供了丰富的消息框类型,但在设计GUI应用程序时,应谨慎使用消息框,避免过度打扰用户或导致用户混淆。在可能的情况下,应考虑使用更友好的用户交互方式(如提示图标、工具提示等)来向用户传达信息。

2. Radiobutton代码表示

from tkinter import *
from tkinter import messagebox
​
# Frame是一个组件 容器
class Application(Frame):def __init__(self,master=None):super().__init__(master)self.master = masterself.pack()self.createWideget()# 核心代码!!!!
​def createWideget(self):self.v = StringVar();self.v.set('F')     # 设置默认选中
​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())     #弹出来的一个提示框
​
if __name__ == '__main__':# 创建根窗口对象root = Tk()root.geometry('500x300-100-200')app = Application(master=root)root.mainloop() #事件循环

3. Checkbutton代码表示

# 10.2 Checkbutton
from tkinter import *
from tkinter import messagebox
​
class Application(Frame):def __init__(self,master=None):super().__init__(master)self.master = masterself.pack()self.createWideget()
​# 核心代码!!!def createWideget(self):# 生成两个不同的变量self.codeHobby = IntVar()self.videoHobby = IntVar()
​print(self.codeHobby.get())     #默认值为0self.c1 = Checkbutton(self,text='敲代码',variable=self.codeHobby,onvalue=1,offvalue=0)self.c2 = Checkbutton(self,text='看视频',variable=self.videoHobby,onvalue=1,offvalue=0)
​self.c1.pack(side='left')self.c2.pack(side='left')
​Button(self,text='确定',command=self.confirm).pack(side='left')
​def confirm(self):if self.videoHobby.get() == 1:messagebox.showinfo('测试','你喜欢看什么类型的视频?')if self.codeHobby.get() == 1:messagebox.showinfo('测试','码农一枚,祝你成功!')
​
if __name__ == '__main__':# 创建根窗口对象root = Tk()root.geometry('450x250-200+200')app = Application(master=root)root.mainloop()     #事件循环

11.Canvas画布组件

canvas(画布)是一个矩形区域,可以放置图形、图像、组件等。

# P11
import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageTk
import random
​
​
class Application(tk.Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidgets()
​def createWidgets(self):self.canvas = tk.Canvas(self, width=300, height=200, bg='green')self.canvas.pack()
​# 画一条折线self.canvas.create_line(10, 10, 30, 20, 40, 50)# 画一个矩形self.canvas.create_rectangle(50, 50, 100, 100)# 画一个椭圆self.canvas.create_oval(50, 50, 100, 100)
​# 加载并调整图片大小img = Image.open('img/02.gif')img = img.resize((100, 100))  # 假设你想将图片缩小到100x75self.photo = ImageTk.PhotoImage(img)self.canvas.create_image(150,75, image=self.photo, anchor='sw')        #sw相对于锚点左下角 center居中 nw左上角nswe
​# 添加按钮btn = tk.Button(self, text='画十个矩形', command=self.draw)btn.pack(side='left', padx=10, pady=10)
​def draw(self):for i in range(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, outline='blue')  # 添加边框颜色以便可见
​
​
if __name__ == '__main__':root = tk.Tk()root.geometry('500x500+200+200')  # 注意这里我修正了加减号的使用app = Application(master=root)root.mainloop()

欢迎小伙伴们白嫖~~~

这篇关于Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107964

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal