GUI:Tkinter(一)

Tkinter文档

一,Tkinter基本流程

1. 创建应用程序主窗口对象

from tkinter import *
window = Tk()
window.mainloop()#开启主循环

2. 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等。

btn = Button(window)

3. 通过几何布局管理器,管理组件的大小和位置

btn.pack()

4. 事件处理 : 通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)

btnQuit = Button(self,text="退出",command=self.master.destroy)

 二,类与对象的角度使用Tkinter

import tkinter as tkclass Application(tk.Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.create_widgets()def create_widgets(self):self.hi_there = tk.Button(self)self.hi_there["text"] = "Hello World\n(click me)"self.hi_there["command"] = self.say_hiself.hi_there.pack(side="top")self.quit = tk.Button(self, text="QUIT", fg="red",command=self.master.destroy)self.quit.pack(side="bottom")def say_hi(self):print("hi there, everyone!")root = tk.Tk()
app = Application(master=root)
app.mainloop()

 

class Application(tk.Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.create_widgets()

其中,Application 继承tk.Frame控件,初始化函数后super().__init__(master)将master传入tk.Frame父类中,其中,master为主窗口(或者上一级窗口)。接下来将Application放在主窗口中(self.pack()),再调用create_widgets()创建其他控件。

包装器(pack)

包装器是 Tk 的形状管理机制之一。 形状管理器用于指定部件在容器内的相对位置——彼此的 宿主 关系。与更为麻烦的 定位器 相比(不太常用,这里不做介绍),包装器可接受定性的相对关系—— 上面 、左边 、填充 等,并确定精确的放置坐标。

fred.pack()                     # defaults to side = "top"
fred.pack(side="left")
fred.pack(expand=1)

 包装器参数设置

anchor

锚点类型。 表示包装器要放置的每个从属组件的位置。

expand

布尔型,0 或 1 。

fill

合法值为:'x' 、'y' 、'both' 、'none'

ipadx 和 ipady

距离值,指定从属部件每一侧的内边距。

padx 和 pady

距离值,指定从属部件的外边距。

side

合法值为:'left'、 'right' 、 'top'、 'bottom'

 

 

def create_widgets(self):self.hi_there = tk.Button(self)self.hi_there["text"] = "Hello World\n(click me)"self.hi_there["command"] = self.say_hiself.hi_there.pack(side="top")self.quit = tk.Button(self, text="QUIT", fg="red",command=self.master.destroy)self.quit.pack(side="bottom")def say_hi(self):print("hi there, everyone!")

关于控件参数设置 

1.字典型设置参数

self.hi_there = tk.Button(self)self.hi_there["text"] = "Hello World\n(click me)"self.hi_there["command"] = self.say_hiself.hi_there.pack(side="top")

2.关键词设置参数

 self.quit = tk.Button(self, text="QUIT", fg="red",command=self.master.destroy)

3.利用config()方法设置参数

fred.config(fg="red", bg="blue")

三, 部分控件的使用

1.Button类

在Button类中,我们一般看重text和command参数,text为该控件的显示内容,command为控件绑定的事件,当然,也不能忘了将控件绑在窗口上。

所以,一般地讲,一个按键的基本形式为

 btnQuit = Button(self,text="退出",command=self.master.destroy)

2.Label类

Label(标签)主要用于显示文本信息,也可以显示图像。

以下是label控件常见的一些属性

1. width,height: 用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字宽度占 2 个字符位置,高度和英文字符一样);如果显示是图像,则以像素为单位。默认值是 根据具体显示的内容动态调整。

2. font 指定字体和字体大小,如:font = (font_name,size)

3. image: 显示在 Label 上的图像,目前 tkinter 只支持 gif 格式。

4. fg 和 bg fg(foreground):前景色、bg(background):背景色

5. justify 针对多行文字的对齐,可设置 justify 属性,可选值"left", "center" or "right"

label01 = Label(self,text="Hello",width=10,height=2,bg="black",fg="white")

3.Entry类

Entry用来接收一行字符串的控件。如果用户输入的文字长度长于Entry控件的宽度时, 文字会自动向后滚动。

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):self.label01 = Label(self,text="用户名")self.label01.pack()self.v1 = StringVar()self.v1.set("ashto")self.entry01 = Entry(self,textvariable=self.v1)self.entry01.pack()self.label02 = Label(self,text="密码")self.label02.pack()self.v2 = StringVar()self.entry02 = Entry(self,textvariable=self.v2,show="*")self.entry02.pack()self.btnQuit = Button(self,text="登录",command=self.login)self.btnQuit.pack()def login(self):usrname = self.v1.get()pwd = self.v2.get()print("用户:",usrname)print("密码:",pwd)if usrname == "Ashto" and pwd == "123456":messagebox.showinfo(Message, "欢迎登录")else:messagebox.showinfo(Message,"用户不存在在!")if __name__ == '__main__':window = Tk()window.title("登录gui")window.geometry("400x200+100+100")app = Application(master=window)window.mainloop()

4.RadioButton类

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):self.v1 = StringVar()self.v1.set("M")self.r1 = Radiobutton(self,text="男",value="M",variable=self.v1)self.r2 = Radiobutton(self,text="女",value="F",variable=self.v1)self.r1.pack(side="left")self.r2.pack(side="left")if __name__ == '__main__':window = Tk()window.title("表单gui")window.geometry("500x200+100+100")app = Application(master=window)window.mainloop()

对于Radiobutton而言,重点关注value与variable参数就可以了,value表示选中该控件得到的值,而variable为绑定在该控件上的变量,控件获取到的值返回给该变量。我们通过StringVar来构造变量,同样地,我们可以通过IntVar,DoubleVar,BooleanVar来分别构造其他变量。 

  

5.CheckButton类

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterself.pack()self.createWidget()def createWidget(self):self.v1 = IntVar()self.v2 = IntVar()self.c1 = Checkbutton(self,text="睡觉",variable=self.v1,onvalue=1,offvalue=0)self.c2 = Checkbutton(self,text="吃饭",variable=self.v2,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.v1.get() == 1:messagebox.showinfo("Test","睡觉有益健康")if self.v2.get() == 1:messagebox.showinfo("Test","吃饭有益健康")if __name__ == '__main__':window = Tk()window.title("表单gui")window.geometry("500x200+100+100")app = Application(master=window)window.mainloop()

onvalue为选中返回值,offvalue为未选中返回值。 

6.Canvas类

self.canvas = Canvas(self,width=300,height=200,bg="green")

self.canvas可以调用方法来生成各种图形

 

关于其他的方法可以自行阅读文档或者ctrl+左键类名查看函数文档。

四,关于其他

 

关于Tk类

Misc 和 Wm 派生出子类 Tk,它代表应用程序的主窗口。一般应用程序都需要直接或间接 使用 Tk。 

Tk类继承自Misc和Wm两个父类

Misc 和 Wm: Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:

Misc:它是所有组件的根父类

Wm:它主要提供了一些与窗口管理器通信的功能函数。 

以上仅举例,了解更多可以继续阅读wm父类的函数文档。 

    def destroy(self):"""Destroy this and all descendants widgets. This willend the application of this Tcl interpreter."""for c in list(self.children.values()): c.destroy()self.tk.call('destroy', self._w)Misc.destroy(self)global _default_rootif _support_default_root and _default_root is self:_default_root = None

关闭主窗口,该方法为Tk所有。

通过Tkinter文档,我们可以得到一些Tk对象的属性:

color

可在 rgb.txt 文件中以颜色名的形式给出,或是 RGB 字符串的形式,4 位 :"#RGB" ,8 位 :"#RRGGBB",12 位:"#RRRGGGBBB",16 位:"#RRRRGGGGBBBB",其中R、G、B 为合法的十六进制数值。 详见 Ousterhout 书中的第 160 页。

cursor

可采用 cursorfont.h 中的标准光标名称,去掉 XC_ 前缀。 比如要获取一个手形光标(XC_hand2),可以用字符串 "hand2"。也可以指定自己的位图和掩码文件作为光标。参见 Ousterhout 书中的第 179 页。

distance

屏幕距离可以用像素或绝对距离来指定。像素是数字,绝对距离是字符串,后面的字符表示单位:c 是厘米,i 是英寸,m 是毫米,p 则表示打印机的点数。例如,3.5 英寸可表示为 "3.5i"

font

Tk 采用一串名称的格式表示字体,例如 {courier 10 bold}。正数的字体大小以点为单位,负数的大小以像素为单位。

geometry

这是一个 widthxheight 形式的字符串,其中宽度和高度对于大多数部件来说是以像素为单位的(对于显示文本的部件来说是以字符为单位的)。例如:fred["geometry"] = "200x100"。

justify

合法的值为字符串: "left" 、 "center" 、 "right" 和 "fill" 。

region

这是包含四个元素的字符串,以空格分隔,每个元素是表示一个合法的距离值(见上文)。例如:"2 3 4 5" 、 "3i 2i 4.5i 2i" 和 "3c 2c 4c 10.43c" 都是合法的区域值。

relief

决定了组件的边框样式。 合法值包括:"raised"、 "sunken" 、"flat" 、"groove" 和 "ridge" 。

scrollcommand

这几乎就是带滚动条部件的 set() 方法,但也可是任一只有一个参数的部件方法。

wrap:

只能是以下值之一:"none" 、 "char" 、 "word"

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

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

相关文章

[CP_AUTOSAR]_系统服务_DEM模块(三)功能规范之诊断事件定义

目录 1、诊断事件定义1.1、Event priority(事件优先级)1.2、Event occurrence(事件发生计数器)1.3、Event kind(事件类别)1.4、Event destination(故障内存)1.5、Diagnostic monitor…

springboot系列教程(三十):springboot整合Zookeeper组件,管理架构中服务协调

一、Zookeeper基础简介 1、概念简介 Zookeeper是一个Apache开源的分布式的应用,为系统架构提供协调服务。从设计模式角度来审视:该组件是一个基于观察者模式设计的框架,负责存储和管理数据,接受观察者的注册,一旦数据…

【数据结构】链表篇

文章目录 1.链表的概念以及结构2.链表的分类2.1 单向或者双向2.2 带头或者不带头2.3 循环或者不循环2.4 无头单向非循环链表和带头双向循环链表 3.单链表的实现3.1 准备工作3.2 节点的创建3.3 单链表的释放3.4 打印链表3.5 单链表的尾插3.6 单链表的尾删3.7 单链表头删3.8 单链…

TiDB系列之:TiCDC同步TiDB数据库数据到Kafka集群Topic

TiDB系列之:TiCDC同步TiDB数据库数据到Kafka集群Topic 一、Changefeed 概述Changefeed 状态流转操作 Changefeed 二、同步数据到Kafka创建同步任务,复制增量数据 KafkaSink URI 配置 kafka最佳实践TiCDC 使用 Kafka 的认证与授权TiCDC 集成 Kafka Connec…

搭建高可用OpenStack(Queen版)集群(一)之架构环境准备

一、搭建高可用OpenStack(Queen版)集群之架构环境准备 一、架构设计 二、初始化基础环境 1、管理节点创建密钥对(方便传输数据) 所有控制节点操作 # ssh-keygen #一路回车即可 Generating public/private rsa key pair. Enter f…

算法通关:016:设计循环双端队列

文章目录 题目思路代码运行结果问题为什么能直接调用方法名 题目 leetcode641 设计循环双端队列 思路 代码 import java.util.Deque; import java.util.LinkedList;/*** Author: ggdpzhk* CreateTime: 2024-08-03* 641 双端队列:利用双向链表和动态数组实现*/ pu…

C#和S7-1200PLC S7.NET通信

1、一步步建立一个C#项目 一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客文章浏览阅读1.7k次,点赞2次,收藏4次。这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。_s7协议批量…

【uniapp离线打包】(基于Android studio)

文章目录 uniapp打包官方教程入口一、准备工作(工具三大件)Android Studio版本推荐 二、准备工作(Android壳和uniapp包)导入Android壳生成uniapp包将uniapp包导入android壳降低jdk版本 三、准备工作(证书)准备Android平台离线签名…

SpringSecurity-1(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)

SpringSecurity 1 初识权限管理1.1 权限管理的概念1.2 权限管理的三个对象1.3 什么是SpringSecurity 2 SpringSecurity第一个入门程序2.1 SpringSecurity需要的依赖2.2 创建web工程2.2.1 使用maven构建web项目2.2.2 配置web.xml2.2.3 创建springSecurity.xml2.2.4 加载springSe…

50 选择结构

常见的选择结构有单分支选择结构、双分支选择结构、多分支选择结构及嵌套的分支结构,也可以构造跳转表来实现类似的逻辑。循环结构和异常处理结构中也可以实现带有 else 子句,可以看作特殊形式的选择结构。 所有的 Python 合法表达式都可以作为条件表达…

一篇文章让你搞懂原码,反码,补码!

目录 1.机器数和机器数真值 1.1机器数 1.2机器数的真值 2.原码,反码,补码的计算方法 2.1原码 2.2反码 2.3补码 3.为什么要使用反码和补码? 3.1原码不能让符号位参与运算的问题: 3.2为了解决原码作减法,引入…

SAP支出管理,企业成本控制的智能钥匙

在企业运营中,有效的支出管理是确保财务健康和提升竞争力的关键。SAP支出管理系统作为企业资源规划的核心组成部分,提供了一套全面的解决方案,帮助企业实现成本控制、风险管理和合规性监督。实现支出管理流程自动化,并主动管理更多…

python爬虫预备知识三-序列化和反序列化

序列化和反序列化 序列化是为了将内存中的数据保存在磁盘上或者用于传输,实现程序状态的保存和共享。反序列化反之。 序列化后的变量再被反序列化回来之后,两者之间已经没有任何关系。 序列化后的文件是在不同程序或者说不同语言之间传递数据的关键方…

分享5款.NET开源免费的Redis客户端组件库

前言 今天大姚给大家分享5款.NET开源、免费的Redis客户端组件库,希望可以帮助到有需要的同学。 StackExchange.Redis StackExchange.Redis是一个基于.NET的高性能Redis客户端,提供了完整的Redis数据库功能支持,并且具有多节点支持、异步编…

[Git][分支管理][上]详细讲解

目录 1.理解分支2.创建分支3.切换分支4.合并分支5.删除分支 1.理解分支 感性理解:分支可以理解为平行宇宙,但是在用户需要的时候,可以将两个平行宇宙合并,此时两个平行宇宙的效果将会"叠加"理性理解:每次提…

TCP 和 UDP 之间的区别?

从 连接,可靠性,传输方式等方面: TCP 是面向连接的协议,在发送数据的时候需要先通过 TCP 的三次握手,而 UDP 是无连接的协议,可以直接传输数据TCP 通过超时重传,流量控制和拥塞控制等方法保障了…

使用JWT的SpringSecurity实现前后端分离

1. SpringSecurity完成前后端完全分离 分析: 前后端分离:响应的数据必须为JSON数据,之前响应的是网页 需要修改的代码有: 登录成功需要返回json数据登录失败需要返回json数据权限不足时返回json数据未登录访问资源返回json数据 1.…

二叉树的前序遍历 - 力扣(LeetCode)C语言

144. 二叉树的前序遍历 - 力扣(LeetCode)(点击前面链接即可查看题目) 一、题目 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: …

文心智能体【MBTI速测小精灵】:趣味速测,精准解析你的性格密码!

文章目录 一、文心智能体平台是什么?二、创建文心智能体智能体创建智能体调试分析智能体基础配置智能体高级配置智能体高级调试 三、文心智能体发布四、文心智能体体验总结 一、文心智能体平台是什么? AgentBuilder文心智能体平台是基于文心大模型的智能…

适用于 Android 的 6 大视频恢复软件榜单 – 恢复您的珍贵回忆!

失去珍贵的回忆可能是一种令人心碎的经历,尤其是在您的 Android 设备上拍摄视频时。无论是由于意外删除、格式化、系统崩溃还是任何其他不可预见的情况,丢失珍贵视频的想法都会造成巨大的痛苦。但不要担心!在这篇博文中,我们将深入…