Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Tkinter教程(每天半小时,3天彻底掌握Tkinter)day1

Tkinter教程(每天半小时,3天彻底掌握Tkinter)day1

作者头像
红目香薰
发布于 2022-11-30 11:30:09
发布于 2022-11-30 11:30:09
5.4K00
代码可运行
举报
文章被收录于专栏:CSDNToQQCodeCSDNToQQCode
运行总次数:0
代码可运行

Tkinter教程(每天半小时,3天彻底掌握Tkinter)day1


目录

Tkinter教程(每天半小时,彻底掌握Tkinter)day1

教程环境

Tkinter概述

GUI是什么

Tkinter是什么

Tkinter的弊端

第一个Tkinter程序

插入ico

关闭python窗体

python窗体居中设置

护眼色_颜色名称_16进制色值_RGB色值

主窗体设置

窗口常用方法

python获取电脑屏幕的大小

python获取窗口的大小,必须先刷新一下屏幕

python设置窗体不能被拉伸

python背景颜色设置

python设置窗口处于顶层

python设置窗体透明度


教程环境

运行系统:win10 开发工具:PyCharm Community Edition 2021.3.1 

Tkinter概述

Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。 Tkinter 编写的程序,也称为 GUI 程序,GUI (Graphical User Interface)指的是“图形用户界面”,它是计算机图形学(CG)的一门分支,主要研究如何在计算机中表示图形,以及利用计算机进行图形的计算、处理和显示等相关工作。

GUI是什么

图形用户界面(Graphical User Interface,简称 GUI),是计算机图形学技术的一种,它一般由窗口、下拉菜单或者对话框等图形化的控件组成。用户通过点击菜单栏、按钮或者弹出对话框的形式来实现与机器的交互,GUI 的存在拉近了人与计算机的的距离,让人机交互的过程变得简单舒适、有温度。

  • Python GUI 工具:Tkinter、wxPython、PyQt、PyGTK、Pywin32 等;

这里我们主要针对Tkinter进行讲解。

Tkinter是什么

Tkinter(即 tk interface,简称“Tk”)本质上是对 Tcl/Tk 软件包的 Python 接口封装,它是 Python 官方推荐的 GUI 工具包,属于 Python 自带的标准库模块,当您安装好 Python 后,就可以直接使用它,而无须另行安装。 作为一款 Python  GUI 工具,Tkinter 拥有良好的跨平台性,支持 Windows、Linux、Mac 平台,它传承了 Python 语法简洁、代码易读的基本特点。 与其他编程语言的 GUI 工具包相比,Tkinter 编码效率高,能够实现快速开发的目的,非常适合初学者学习。Tkinter 使用纯 Python 语言开发,与 C/C++ 开发的 Qt 框架相比,Tkinter 有自身的局限性,比如性能、功能丰富程度等都不及 Qt,因此它只适合开发一些简单的程序,比如计算器的界面,或者一个简易的聊天窗口等。

Tkinter的弊端

通常情况下不会使用 Tkinter 来开发较为复杂的桌面应用程序,这是由 Python 语言自身特点决定的,作为一种解释型语言和脚本语言,Python 并不具备开发复杂桌面应用的优势。 但“麻雀虽小,五脏俱全”,Tkinter 作为 Python  GUI 开发工具之一,它具有 GUI 软件包的必备的常用功能。比如,它提供了十多种不同类型的窗口控件、窗口布局管理器、事件处理机制等,加之其开发效率高、代码简洁易读, Tkinter 自问世以来,备受大家青睐。当您想要制作一个小工具的界面或者比较简单的桌面应用程序时,那么Tkinter 将是一个不错的选择。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m tkinter

第一个Tkinter程序

我们先简单看一下示例,后面在进行具体的分析与讲解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
import tkinter as tk
# 调用Tk()创建主窗口
root_window =tk.Tk()
# 给主窗口起一个名字,也就是窗口的名字
root_window.title("这是我们的第一个tk页面,除了title啥都没设置。")
#开启主循环,让窗口处于显示状态
root_window.mainloop()

插入ico

在这个demo里面可以看到我不仅设置了iconbitmap而且还设置了对应的background颜色,并且添加了一个text文本,通常会使用tk.Lable设置,在参数中能看到,bg是北京颜色,fg是文字颜色,font的参数里面是字体设置。依次是字体、字号、样式,bold italic加粗的斜体。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
import tkinter as tk

# 调用Tk()创建主窗口
root_window = tk.Tk()
# 给主窗口起一个名字,也就是窗口的名字
root_window.title("CSDN的ico")
# 设置窗口大小:宽x高,,此处不能为 "*",必须使用 "x"
root_window.geometry('450x300')
# 更改左上角窗口的的icon图标,加载CSDN复制下来的ico
root_window.iconbitmap('csdn.ico')
# 设置主窗口的背景颜色,颜色值可以是英文单词,或者颜色值的16进制数,除此之外还可以使用Tk内置的颜色常量
root_window["background"] = "#DCE2F1"  # 海天蓝,一种比较护眼的颜色
# 添加文本内,设置字体的前景色和背景色,和字体类型、大小
text = tk.Label(root_window, text="2022创造更多的价值", bg="yellow", fg="red", font=('Times', 20, 'bold italic'))
# 将文本内容放置在主窗口内
text.pack()
# 添加按钮,以及按钮的文本,并通过command 参数设置关闭窗口的功能
button = tk.Button(root_window, text="关闭", command=root_window.quit)
# 将按钮放置在主窗口内
button.pack(side="bottom")

# 开启主循环,让窗口处于显示状态
root_window.mainloop()

关闭python窗体

这里需要知道command=root_window.quit是关闭窗体,root_window是变量名,根据你自己定义的窗体名称替换即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加按钮,以及按钮的文本,并通过command 参数设置关闭窗口的功能
button = tk.Button(root_window, text="关闭", command=root_window.quit)
# 将按钮放置在主窗口内
button.pack(side="bottom")

python窗体居中设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
screenwidth = root_window.winfo_screenwidth()
screenheight = root_window.winfo_screenheight()
dialog_width = 800
dialog_height = 600
# 前两个参数是窗口的大小,后面两个参数是窗口的位置
root_window.geometry(
    "%dx%d+%d+%d" % (dialog_width, dialog_height, (screenwidth - dialog_width) / 2, (screenheight - dialog_height) / 2))

先获取平路的宽度以及高度,在根据咱们自定义的窗体宽高来计算居中。

这里采用800*600是为了后面的操作。因为800*600几乎所有的电脑都不会出现页面溢出,那么咱们根据它来创建一个常用的功能页面,需要啥留下什么,其余的删除,就是我们需要的页面。我们不做复杂的,够用即可。

护眼色_颜色名称_16进制色值_RGB色值

提供了10种比较护眼的颜色,以后在背景颜色设置的时候可以使用到。

1、绿豆沙 #C7EDCC RGB(199, 237, 204) 2、银河白 #FFFFFF RGB(255, 255, 255) 3、杏仁黄 #FAF9DE RGB(250, 249, 222) 4、秋叶褐 #FFF2E2 RGB(255, 242, 226) 5、胭脂红 #FDE6E0 RGB(253, 230, 224) 6、海天蓝 #DCE2F1 RGB(220, 226, 241) 7、葛巾紫 #E9EBFE RGB(233, 235, 254) 8、极光灰 #EAEAEF RGB(234, 234, 239) 9、青草绿 #E3EDCD RGB(227, 237, 205) 10、电脑管家 #CCE8CF RGB(204, 232, 207)

主窗体设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入tk
from tkinter import *
# 创建一个主窗口对象
window = Tk()
# 调用mainloop()显示主窗口
window.mainloop()

其实主窗体就是个空的,啥也没有的窗体。我们需要依据窗体的属性以及属性值进行窗体样式的设置。 

窗口常用方法

下表列出了窗口的常用方法,其中 window 代表主窗口对象:

函数

说明

window.title("my title")

接受一个字符串参数,为窗口起一个标题

window.resizable()

是否允许用户拉伸主窗口大小,默认为可更改,当设置为 resizable(0,0)或者resizable(False,False)时不可更改

window.geometry()

设定主窗口的大小以及位置,当参数值为 None 时表示获取窗口的大小和位置信息。

window.quit()

关闭当前窗口

window.update()

刷新当前窗口

window.mainloop()

设置窗口主循环,使窗口循环显示(一直显示,指导窗口被关闭)

window.iconbitmap()

设置窗口左上角的图标(图标是.ico文件类型)

window.config(background ="red")

设置窗口的背景色为红色,也可以接受 16 进制的颜色值

window.minsize(50,50)

设置窗口被允许调整的最小范围,即宽和高各50

window.maxsize(400,400)

设置窗口被允许调整的最大范围,即宽和高各400

window.attributes("-alpha",0.5)

用来设置窗口的一些属性,比如透明度(-alpha)、是否置顶(-topmost)即将主屏置于其他图标之上、是否全屏(-fullscreen)全屏显示等

window.state("normal")

用来设置窗口的显示状态,参数值 normal(正常显示),icon(最小化),zoomed(最大化),

window.withdraw()

用来隐藏主窗口,但不会销毁窗口。

window.iconify()

设置窗口最小化

window.deiconify()

将窗口从隐藏状态还原

window.winfo_screenwidth() window.winfo_screenheight()

获取电脑屏幕的分辨率(尺寸)

window.winfo_width() window.winfo_height()

获取窗口的大小,同样也适用于其他控件,但是使用前需要使用 window.update() 刷新屏幕,否则返回值为1

window.protocol("协议名",回调函数)

启用协议处理机制,常用协议有 WN_DELETE_WINDOW,当用户点击关闭窗口时,窗口不会关闭,而是触发回调函数。

python获取电脑屏幕的大小

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.winfo_screenwidth()  # 宽度
window.winfo_screenheight()  # 高度
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("电脑的分辨率是%dx%d" % (window.winfo_screenwidth(), window.winfo_screenheight()))

python获取窗口的大小,必须先刷新一下屏幕

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.update()
print("窗口的分辨率是%dx%d" % (window.winfo_width(), window.winfo_height()))

由于我没有设置窗口的分辨率,这里读取的200X200代表默认的窗体大小。

python设置窗体不能被拉伸

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.resizable(0, 0)

python背景颜色设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.config(background="#DCE2F1")

python设置窗口处于顶层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.attributes('-topmost',True)

这样就可以看到置于最顶层了。 

python设置窗体透明度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.attributes('-alpha', 1)

在这里可以看到0.5就是50%的透明度。 

第一篇文章就到这里,希望能为大家创造一定的价值。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C# 的事件,一般你不需要担心它的线程安全问题!
时不时会有小伙伴跟我提到在 C# 写事件 += -= 以及 Invoke 时可能遇到线程安全问题。然而实际上这些操作并不会有线程安全问题,所以我特别写一篇博客来说明一下,从原理层面说说为什么不会有线程安全问题。
walterlv
2023/10/22
4410
.Neter所应该彻底了解的委托
本文将通过引出几个问题来,并且通过例子来剖析C#中的委托以及用法,做抛砖引玉的作用
ryzenWzd
2020/04/29
4220
.NET基础拾遗(4)委托、事件、反射与特性
  委托这个概念对C++程序员来说并不陌生,因为它和C++中的函数指针非常类似,很多码农也喜欢称委托为安全的函数指针。无论这一说法是否正确,委托的的确确实现了和函数指针类似的功能,那就是提供了程序回调指定方法的机制。
Edison Zhou
2018/08/20
1K0
.NET基础拾遗(4)委托、事件、反射与特性
C#中的委托和事件 - Part.1
文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量)。例如:委托类型 委托实例 = new 委托类型(方法名);
张子阳
2018/09/30
1.1K0
C#中的委托和事件 - Part.1
C#委托与事件
Delegate ----   C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。 声明委托   声明委托的语法如下: delegate return-type delegate-name (parameter-list);   其中:return-type是返回类型,delegate-name是委托名字,pa
拾点阳光
2018/05/10
1K0
C# 事件
一、前言:前面的随笔中说完了委托,现在看看事件到底可以干什么,在前面的随笔中,使用委托的过程中,有一个很别扭,也很显然易见的问题,就是委托第一次必须初始化用"=",绑定二次事件用"+="这个是非常的,
郑小超.
2018/01/24
6420
C#  事件
C# 中的委托和事件
文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量)。例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续)
Edison Zhou
2018/08/20
9430
C# 中的委托和事件
.Net中观察者模式(Observer):C#事件
奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。
小蜜蜂
2019/07/15
7690
.Net中观察者模式(Observer):C#事件
C# 学习笔记(7)—— 事件
事件是基于委托之上的新特性,自然也是 C# 独有的概念。事件理解起来不难,意思就是他的字面意思,就是我们日常理解的事件
Karl Du
2023/10/20
2350
[C#1] 9-委托
委托揭秘 编译器和CLR在后台做了很多工作来隐藏委托本身的复杂性,如下一句委托声明: //编译器为我们产生了一个同名的类 public delegate void MyDelegate(int i);
blackheart
2018/01/19
8070
[C#1] 9-委托
C#委托与事件学习笔记
      今天跟随视频学习了一下C#中最重要的一些概念之委托与事件。老杨的视频讲的还是挺深入浅出,不过刚接触C#.NET的人还是朦朦胧胧,就像张子阳先生说的“每次见到委托和事件就觉得心里别(biè)得慌,混身不自在”。跨过这道坎的人就有种一览众山小的感觉了。我又浏览了皱华栋老师JamesZou的博文《深入理解C#委托及原理》(地址:http://www.cnblogs.com/jameszou/archive/2011/07/21/2112497.html),以及张子阳Jimmy Zhang的博文《C# 中的委托和事件》(地址:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html)总算对委托有了一点理性的感觉了,在此谢谢ITCAST,JamesZou以及Jimmmy Zhang的博文,谢谢。
Edison Zhou
2018/08/20
4730
C#委托与事件学习笔记
庖丁解牛——深入解析委托和事件
这篇博文我不讲委托和事件的概念,因为大段的文字概念没有任何意义。 具体想了解,委托和事件的概念可以MSDN查阅。 我这篇文章的主题思路是委托如何一步步进化成事件: 何为委托--->委托来实现事件--->用方法对委托的封装--->Event的 add,remove方法的引入--->标准事件写法--->反编译探究竟。 用几个例子以及Reflector反编译探究委托和事件的关系。不足之处,还望多多指教... 何为委托: 首先,委托是一种类型,是一种定义了方法签名的类型。 委托可以理解为函数指针(安全
用户1161731
2018/03/12
1K0
庖丁解牛——深入解析委托和事件
.NET面试题系列[7] - 委托与事件
C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影。C#中如果没有了事件,那绝对是一场灾难,令开发者寸步难行。而委托又是事件的基础,可以说是C#的精髓,个人认为,其地位如同指针之于C语言。
s055523
2018/09/14
1.2K0
.NET面试题系列[7] - 委托与事件
事件与委托的区别就是“+=”和“-="?
事件的作用与委托变量一样,只是功能上比委托变量有更多的限制。(比如:1.只能通过+=或 -= 来绑定方法(事件处理程序)2.只能在类内部调用(触发)事件。)
静心物语313
2020/03/24
1.3K0
事件与委托的区别就是“+=”和“-="?
理解委托类型
delegate 是一种可用于封装命名或匿名方法的引用类型。(并不是所有的引用类型都是class)
lulianqi
2018/09/07
7390
理解委托类型
C#基础篇 - 理解委托和事件
委托类似于C++中的函数指针(一个指向内存位置的指针)。委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针。简单理解,委托是一种可以把函数当做参数传递的类型。很多情况下,某个函数需要动态地去调用某一类函数,这时候我们就在参数列表放一个委托当做函数的占位符。在某些场景下,使用委托来调用方法能达到减少代码量,实现某种功能的用途。
Esofar
2018/09/05
5420
C#基础篇 - 理解委托和事件
深入分析委托与事件—C#综合揭秘——细说多线程
本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单。 还将为您解释委托的协变与逆变,以及如何使用 Delegate 使 Observer(观察者)模式的使用变得更加简单。 在事件的介绍上,会讲述事件的使用方式,并以ASP.NET的用户控件为例子,介绍一下自定义事件的使用。 最后一节,将介绍Predicate<T>、Action<T>、Func<T,TResult>多种泛型委托的使用和Lambda的发展过程与其使用方式。 因为时间仓促,文中有错误的地方敬请点评。
vv彭
2021/01/06
2.2K0
[读书笔记]C#学习笔记二: 委托和事件的用法及不同.
前言:  C#委托是什么     c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针来实现对函数的操作. 委托的定义和方法的定义类似, 只是在定义的前面多了一个delegate关键字. 正文: 委托可以被视为一个更高级的指针,它不仅仅能把地址传指向另一个函数,而且还能传递参数,返回值等多个信息。 系统还为委托对象自动生成了同步,异步的调用方式,开发人员使用BeginInvok
一枝花算不算浪漫
2018/05/18
6540
java多线程的常用方法(以及注意事项)
1 /* 2 * 线程的常用方法 3 * 1.start(); 4 * 2.run(); 5 * 3.sleep(int millsecond); 6 * 4.isAlive(); -->判断线程是否还在运行 7 * 5.currentThread(); -->返回当前正在使用CPU资源的线程 8 * 6.interrupt();
Gxjun
2018/03/22
7350
java多线程的常用方法(以及注意事项)
C#编写简单的聊天程序
这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点参考。文章大体分为四个部分:程序的分析与设计、C#网络编程基础(篇外篇)、聊天程序的实现模式、程序实现。
张子阳
2018/09/30
1.6K0
C#编写简单的聊天程序
相关推荐
C# 的事件,一般你不需要担心它的线程安全问题!
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验