GUI:Tkinter(一)

news2025/1/24 17:56:43

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 tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.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_hi
        self.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 = master
        self.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_hi
        self.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_hi
        self.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 messagebox


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.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 messagebox


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.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 messagebox


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.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 will
        end 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_root
        if _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.coloradmin.cn/o/1977855.html

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

相关文章

Java中Lambda表达式的使用

Lambda的背景 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expressio…

用户看广告获取密码访问网页内容流量主模式源码

简介: 全开源付费进群流量主模式,用户看广告获取密码访问网页内容,网站生成内容,用户需要浏览内容跳转至小程序,观看广告后获取密码,输入密码查看网页内容。 与之前得9.9付费进群区别就是内容体现在了网页…

【信创】国产操作系统上使用的万能打印驱动 _ 统信 _ 麒麟 _ 中科方德

往期好文:统信UOS服务器离线安装postgresql数据库 Hello,大家好!今天给大家带来一款在信创终端操作系统上使用的万能打印驱动——瑞印万能打印驱动。这款驱动程序是国产操作系统下的通用打印驱动程序,具有很高的兼容性和广泛的功能…

图论:1857. 有向图中最大颜色值(拓扑排序+动态规划)

文章目录 1.问题分析2.代码解析2.1 代码步骤1. 初始化数据结构2. 构建图和入度数组3. 初始化队列4. 拓扑排序和动态规划5. 检查是否存在环并返回结果 3. 问题扩展1. 最长路径问题(DAG)2. 最短路径问题(DAG)3. 最大路径和问题4. 路…

科普文:微服务之Spring Cloud 客户端负载均衡组件LoadBalancer替代Ribbon

概叙 负载均衡 负载均衡的两个基本点: 选择哪个服务器来处理客户端请求。将客户端请求转发出去。 一个核心原理:通过硬件或软件的方式维护一个服务列表清单。当用户发送请求时,会将请求发送给负载均衡器,然后根据负载均衡算法从…

中仕公考:2024年重庆市属事业单位招聘公告

本次公开招聘市属事业单位工作人员218名,报考者可登录重庆市人力资源和社会保障局官网“事业单位公开招聘”栏查阅。 (一)可报考的条件 1.具有中华人民共和国国籍; 2.遵守中华人民共和国宪法和法律,具有良好的品行; 3.身体健康,符合事业单…

OGG同步目标端中文乱码处理

现象说明: 源端字符集:AMERICAN_AMERICA.ZHS16GBK 目标端字符集:AMERICAN_AMERICA.AL32UTF8 源端同步过来的数据显示中文乱码。 查询数据库表中含有乱码的字段: select * from xx.xxxx a where to_char(a.crtopetime,yyyy-mm-…

一些不被人熟知,但又很好用的HTML属性

HTML(超文本标记语言)具有多种属性,可用于增强我们的网页的结构和功能。 下面我就给大家介绍一下,一些很好用的HTML属性,但是不被人熟知的HTML属性 contenteditable: 这个属性使我们的元素变的可编辑。用…

谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存

文章目录 一,谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存1,在Elasticsearch的配置类中增加通用设置2,索引数据3,验证 一,谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存 1,在…

环境搭建:全面详尽的 MongoDB Shell MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主)

环境搭建:全面详尽的 MongoDB Shell & MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主) MongoDB 是一个基于文档的 NoSQL 数据库,以其高性能、灵活性和可扩展性而受到广泛欢迎。本文将带您完成 MongoDB 的安装…

数据结构第十讲:二叉树OJ题

数据结构第十讲:二叉树OJ题 1.单值二叉树2.相同的树3.对称二叉树4. 另一棵树的子树5.二叉树的前序遍历6.二叉树的中序遍历7.二叉树的后序遍历8.二叉树的构建及其遍历9.二叉树选择题9.1二叉树性质19.2二叉树性质29.3二叉树性质三9.4选择题 1.单值二叉树 链接: OJ题链…

Java-----二叉树

1.树型结构 1.1概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 1.有…

本地文件上传

java本地文件上传 1、FileController /*** author: yc* des: 文件接口* date: 2024/8/4 11:11*/ RestController RequestMapping("/file") public class FileController {Resourceprivate FileService fileService;PostMapping("/upload")public Respon…

智能交通(6)——DQN代码复现

伪代码 如算法描述,dqn即深度q网络和记忆池 初始化记忆池和可以容纳的数量N 动作价值函数Q使用随机权重进行初始化。 目标动作价值函数Q′也使用相同的权重进行初始化,即Q′Q。 循环训练M局 初始化和预处理观察到的状态 每局循环训练T步 采用e的概…

【Scene Transformer】scene transformer论文阅读笔记

文章目录 序言(Abstract)(Introduction)(Related Work)(Methods)(Scene-centric Representation for Agents and Road Graphs)(Encoding Transformer)(Predicting Probabilities for Each Futures)(Joint and Marginal Loss Formulation) (Results)(Discussion)(Questions) sce…

Linux|最佳命令行下载加速器

引言 无论是远程工作还是本地工作,我们经常需要从外部获取信息。在没有其他选择的情况下,使用命令行工具来获取这些信息是一个不错的选择。 本文[1]将介绍一些通过命令行下载内容时最常使用的工具。 Wget 我们首先介绍一个广受欢迎的工具 wget。它是一个…

使用Qt编译modbus

一.编译库文件 1. 创建library项目 2. 选择要配置的编译器 3. 把自动生成的源码都移除:(右键单击,选择 remove) 4 4. 导入库源码 把源码拷贝到项目目录下(.pro 文件所在的目录) 5. 修改 configure.js 文…

(计算机网络)物理层

目录 一.基本概念 二.基本术语 三.码元 四.多路复用技术 一.基本概念 1. 2. 3. 4. 5. 6. 7. 8. 9. 二.基本术语 1. 2. 3.早期--公用的电话网传输数据,网络上传的是模拟信号,调制解调器--将数字信号转化成模拟信号,最后,调制解…

Java: 线程安全问题的解决方案(synchronized)

发生原因 要想解决线程安全问题,那么我们首先得知道线程安全问题为什么会发生. 发生原因: 线程在操作系统中是"随机调度,抢占式执行的"[根本原因].多个线程,同时修改同一个变量修改操作不是"原子"的内存可见性问题指令重排序 解决方案 原因1和2,我们很…

htsjdk库FeatureCodec和Feature接口介绍

在 HTSJDK 库中,FeatureCodec 接口和 Feature 接口分别扮演不同的角色,用于处理基因组数据的不同方面。下面是这两个接口的区别和各自的功能: FeatureCodec 接口 主要功能 编码和解码:FeatureCodec 接口的主要职责是定义如何将数据从文件格式解码为 Java 对象(即 Featur…