「@Author:Runsen」

现在极少有人会用上tkinter了,所以真正研究的人也就更少了,本来不想更新tkinter。看到很多人在学tkinter,其实用Python做布局,没有人这么干。但还是更新几节tkinter,在Python从入门到大师教程中来。

tkinter

Tkinter包是Python附带的标准软件包,所以我们不需要安装任何东西就可以使用它。

窗口主体框架

每一个 tkinter 应用的主体框架都可以包含下面这部分. 定义 window 窗口 和 window的一些属性, 然后书写窗口内容, 最后执行window.mainloop让窗口活起来.

import tkinter as tk

window = tk.Tk()

window.title('my window')

window.geometry('200x100')

# 这里是窗口的内容

window.mainloop()

窗口内容

这次我们会建立一个用来描述的标签 tk.Label, 比如:

import tkinter as tk

window = tk.Tk()

window.title('my window')

window.geometry('200x100')

l = tk.Label(window,

text='OMG! this is TK!', # 标签的文字

bg='green', # 背景颜色

font=('Arial', 12), # 字体和字体大小

width=15, height=2 # 标签长宽

)

l.pack() # 固定窗口位置

window.mainloop()

控件

上面的Label就是一个控件,还有很多的,如按钮,标签和文本框等,如下图所示

控件自带的共同属性,如大小,字体和颜色等。可根据控件展现形式选择相应的属性,具体属性如下表:

tkinter绑定事件

tkinter绑定事件,就是定义一个函数,然后通过command属性传入函数名,下面通过Button绑定事件,点击就出现Runsen爱学习

from tkinter import *

def p_label():

global root

Lb = Label(root, text='Runsen爱学习')

Lb.pack()

root = Tk()

root.title("应用程序窗口")

B_n = Button(root, text='点我', command=p_label, bg='red') # command后面不能有任何的标点符号

B_n.pack()

root.mainloop()

布局显示

一个窗口都应该有布局,就是pack的时候需要设置side,expand需要扩展吗,fill需要填充吗

from tkinter import *

root = Tk()

root.title("应用程序窗口")

Button(root,text='1').pack(side=LEFT,expand=YES,fill=Y)

Button(root,text='2').pack(side=TOP,expand=YES,fill=BOTH)

Button(root,text='3').pack(side=RIGHT,expand=YES,fill=NONE)

Button(root,text='4').pack(side=LEFT,expand=NO,fill=Y)

Button(root,text='5').pack(side=TOP,expand=YES,fill=BOTH)

Button(root,text='6').pack(side=BOTTOM,expand=YES)

Button(root,text='7').pack(anchor=SE)

root.mainloop()

除了pack还有一个grid,grid将组件布局为表格

下面做一个电话拨号盘GUI

from tkinter import *

root = Tk()

labels = [['1','2','3'], # 文本,布局为网格

['4','5','6'],

['7','8','9'],

['*','0','#']]

for r in range(4): # 行循环

for c in range(3): # 列循环

label = Label(root,

relief=RAISED, # 设置边框格式

padx=10, # 加宽标签

text=labels[r][c]) # 标签文本

label.grid(row=r, column=c) # 将标签放置在r行c列

root.mainloop()

制作一个日历

上面教你做一个电话拨号盘GUI,下面能做一个简单的日历吗?

我看你就不会,不是我瞧不起你

放心,有我在。这需要导入calendar模块了,

import calendar

from tkinter import *

root = Tk()

labels = [['Mon','Tue','Wed','Thu','Fri','Sat','Sun']]

MonthCal = calendar.monthcalendar(2020, 5)

for i in range(len(MonthCal)):

labels.append(MonthCal[i])

for r in range(len(MonthCal)+1):

for c in range(7):

if labels[r][c] == 0:

labels[r][c] = ' '

label = Label(root,

padx=5,

pady=5,

text=str(labels[r][c]))

label.grid(row=r,column=c)

root.mainloop()

丰富我们的日历

上面的日历就是一个辣鸡,啥功能都没有,需求很简单,就是来两个按钮实现向上翻,向下翻。

向上翻,向下翻两个按钮就需要清空界面,再把日历加到labels列表中 ,放置日历。好像很简单,其实就是这么简单。

大家想一想,怎么做出来。我还是给标准实现代码

# @Author: Runsen

import calendar

from tkinter import *

root = Tk()

def LabelCal(Year, Month):

# 首行放置“年、月”的位置

label = Label(root,text=str(Year)+"年")

label.grid(row=0,column=2)

label = Label(root,text=str(Month)+"月")

label.grid(row=0,column=4)

# labels列表:放置“星期”的标题

labels = [['Mon','Tue','Wed','Thu','Fri','Sat','Sun']]

# 用calendar库计算日历

MonthCal = calendar.monthcalendar(Year, Month)

# 先把界面清空

for r in range(7):

for c in range(7):

label = Label(root,

width =5,

padx=5,

pady=5,

text=' ')

label.grid(row=r+1,column=c)

# 把日历加到labels列表中

for i in range(len(MonthCal)):

labels.append(MonthCal[i])

# 放置日历

for r in range(len(MonthCal)+1):

for c in range(7):

if labels[r][c] == 0:

labels[r][c] = ' '

label = Label(root,

width =5,

padx=5,

pady=5,

text=str(labels[r][c]))

label.grid(row=r+1,column=c) # 网格布局

# 默认日期

Year, Month = 2020,5

LabelCal(Year, Month)

# button:Enter

def ButtonPrevious():

global Year, Month

Month = Month-1

if Month<1:

Month = Month+12

Year = Year-1

LabelCal(Year, Month)

button1 = Button(root, text='Previous', command=ButtonPrevious)

button1.grid(row=len(MonthCal)+3, column=0)

# button:Clear

def ButtonNext():

global Year, Month

Month = Month+1

if Month>12:

Month = Month-12

Year = Year+1

LabelCal(Year, Month)

button2 = Button(root, text='Next', command=ButtonNext)

button2.grid(row=len(MonthCal)+3, column=6)

root.mainloop()

运行一波,来一个最终实现gif效果图。❝ 本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

Reference

[1]

pythonguitkinter组件_四十八、Python中的GUI布局tkinter相关推荐

  1. 四十八、Python中的GUI布局tkinter

    @Author:Runsen 现在极少有人会用上tkinter了,所以真正研究的人也就更少了,本来不想更新tkinter.看到很多人在学tkinter,其实用Python做布局,没有人这么干.但还是更 ...

  2. python凯撒密码详解_四十八、Python用smtp发邮件详解(163和QQ邮箱)

    Python发邮件详解 一.利用163的smtp发送邮件 import smtplibfrom email.mime.text import MIMETextfrom email.header imp ...

  3. [Python从零到壹] 四十八.图像增强及运算篇之形态学开运算、闭运算和梯度运算

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. Python的内置函数(四十八)、setattr()函数

    参考 Python的内置函数(四十八).setattr()函数 - 云+社区 - 腾讯云 描述 setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的. 语法 se ...

  5. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  6. 二维数组离散程度matlab,(十八)数据分析中的一些概念

    (十八)数据分析中的一些概念 HIKAI 29 SEP 2017 0 Comments 矢量.向量.标量 矢量和向量是一个东西,只是在不同领域里面用到的不同称呼.矢量常常用在物理学中,向量在数学.几何 ...

  7. JavaScript学习(四十八)—原型对象的增删改查

    JavaScript学习(四十八)-原型对象的增删改查 一.构造方法与原型对象的图解 二.型对象的增删改查 (一).什么是原型 每个函数都会有一个属性--prototype属性,这个属性都会有一个对象 ...

  8. 罗永浩:我今年四十八岁,还可以承受无数次的失败;iOS14 或将推出系统级「小程序」功能;​ PyCharm新版发布| 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自视觉中国 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦, ...

  9. 【Visual C++】游戏开发四十八 浅墨DirectX教程十六 三维地形系统的实现

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

最新文章

  1. FTP匿名访问修复方法
  2. php网站首页点击更多时获取数据,jQuery+PHP实现点击按钮加载更多,不刷新页面加载更多数据!附:可用源码+demo...
  3. Cacti 自定义脚本监控
  4. 73 Zabbix 微信告警
  5. 在电影里看到的一个小故事
  6. 【BLE】信号强度(RSSI)知识整理
  7. Redis的LRU算法
  8. android 全局进度条,Android:如何在中心显示全屏进度条
  9. python 报错继续执行_Python报错不要慌,这三个关键词帮你解决问题!
  10. 对话Satya Nadella:大规模AI模型、人机界面或将迎来大突破
  11. cadence快捷键修改文件_PCB快捷键设置
  12. 上位机与西门子PLC通信协议
  13. C语言普通字体转换花体 英文网名神器
  14. 2019-PINN-A deep learning framework for solving forward and ... nonlinear PDEs
  15. android内置so库,带so库的apk正确内置到system/app详解
  16. 力扣707设计链表(单链表,JavaScript)
  17. OpenCV4萌新之路——详解图像读取函数 “imread”
  18. Java并发(四)BlockingQueue的使用
  19. 【论文泛读97】建立具有情感原因的在线移情聊天机器人
  20. 日本推销之神原一平38种笑容

热门文章

  1. web文件 群晖_【原创】群晖NAS 上部署静态网站
  2. struts2 手动验证和框架验证
  3. 一人之力,毁掉一个开发者活动
  4. java ubuntu 14.04,ubuntu14.04下安装JAVA
  5. launch mysql_Mac Pro 开机自启动 PHP-FPM,Nginx,MySql 等软件
  6. mysql128位整数_mysql的数据类型
  7. Oracle11g rac监听,关于oracle11g RAC 监听器使用中出现的no services以及no listener分析...
  8. stl clocklist 查找元素_C++算法竞赛中常用的STL
  9. oracle10g sys密码忘记,Oracle 10g忘记system,sys密码的解决办法。
  10. win10安装jdk1.8并配置环境变量_win10系统安装jdk13.02的环境变量配置