python中tkinter窗口位置\坐标\大小等实现示例


Posted in Python onJuly 09, 2020

正在尝试着做一个比较完善的画图软件,计划使用tkinter库中的canvas控件来做,然后正在攻关图形项位置、坐标、大小及其他属性项的保存和加载的问题,刚好需要用到坐标、位置的知识,因此作为这个画图软件的附带产出物,整理成了本篇博文,分享给大家,一起研究研究,期待能对你工作带来启发和帮助。

不忘初心,方得始终,让我们一起共勉!

好的,言归正传,回归本篇博文的主题:python中tkinter窗口位置|坐标\大小等知识的科普。

大家都知道tkinter库中有很多控件和主窗口,因此这些控件和主窗口都有对应的屏幕坐标的信息。因此我们可以分别进行介绍。

一、关于主窗口的介绍:

我们见的比较多的命令如下:

root.geometry("300x200+100+50")

这是什么意思呢?

其实:第一个是指窗口的宽度,第二个窗口的高度,第三个窗口左上点离左屏幕边界距离,第四个窗口左上点离上面屏幕边界距离。 那么,放在整段代码里如下:

from tkinter import *
root = Tk()
root.geometry("300x200+100+50")
root.mainloop()

显示效果如下:

python中tkinter窗口位置\坐标\大小等实现示例

(1)窗口属性设置

在上面程序的基础上,在root = Tk()和root.mainloop()之间添加下面的代码以在窗口中添加元素

窗口标题:root.title("title_a")

添加窗口图标:root.iconbitmap(icon_file),icon_file就是一个.ico的图标文件,使用绝对或相对路径 设置窗口大小:root.geometry("x_WIDTHxx_HEIGHT"),其中将_WIDTH替换为窗口宽度,将_HEIGHT替换为窗口高度 设置窗口在屏幕上的位置:

root.geometry("+X+Y"),X/Y表示以屏幕左上角为顶点的窗口的坐标

(2)常用的事件处理函数:

刷新窗口状态:root.update()

销毁窗口:root.destroy()

自动触发事件:root.after(sec,command),表示多少秒以后自动执行command

置顶窗口:root.wm_attributes('-topmost',1)

隐藏窗口外部:root.overrideredirect(True)

设置最大的窗口:root.maxsize(600, 400)

设置最小的窗口:root.minsize(300, 240)

设置窗口是否可以缩放(两种方法): 

root.resizable(width=False, height=False)#禁止改变窗口大小

root.resizable(0, 0) # 设置窗口大小不可变

(3)获取窗口的方法

winfo_width获得窗口的宽度,winfo_height获得窗口的高度。以上两个方法都是无参方法,通过返回值我们可以获得窗口的宽高。

from tkinter import *
 
def go():
  txt = '窗口的左上角坐标为:(%s,%s)\n窗口的高度为:%s窗口的宽度为:%s' \
     % (root.winfo_x(),root.winfo_y(),root.winfo_width(),root.winfo_height())
  label1.configure(text=txt)
  root.after(1,go)
 
root = Tk()
root.geometry("300x200+100+50")
label1 = Label(root)
label1.pack(expand=YES)
go()
root.mainloop()

运行效果如下:

python中tkinter窗口位置\坐标\大小等实现示例

(4)一个很重要的知识点

我们使用上述的方法得到的位置和宽高,其实是tk初始化时的一个值。因此在初始化的时候默认都是1,如果需要获取准确的位置和大小信息 此时我们调用update方法,刷新win窗口。

运行脚本如下:

import tkinter
win = tkinter.Tk()
win.geometry("100x100")
print("初始化的窗口的宽度和宽度为 %s * %s" % (win.winfo_width(),win.winfo_height()))
win.update()
print("update后的窗口的宽度和宽度为 %s * %s" % (win.winfo_width(),win.winfo_height()))
win.mainloop()

python中tkinter窗口位置\坐标\大小等实现示例

(5)常用的一些位置处理函数

设置窗口最大化

#设置窗口最大化:
#方法一
root = Tk()
w, h = root.maxsize()
root.geometry("{}x{}".format(w, h)) #看好了,中间的是小写字母x
#方法二
root = Tk()
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
root.geometry("%dx%d" %(w, h))
#方法三
root = Tk()
root.attributes("-fullscreen", true)

设置居中显示

def center_window(root, width, height):
  screenwidth = root.winfo_screenwidth()
  screenheight = root.winfo_screenheight()
  size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
  print(size)
  root.geometry(size)
  root.update()
  print(root.winfo_x())

调用脚本:

import tkinter as tk
root = tk.Tk()
root.title('测试窗口')
center_window(root, 500, 340)
root.mainloop()

二、关于控件的位置介绍

其实跟主窗口的访问方式类似,主要是要找到对应的方法和函数。

import tkinter as tk
 
def center_window(root, width, height):
  screenwidth = root.winfo_screenwidth()
  screenheight = root.winfo_screenheight()
  size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
  root.geometry(size)
  root.update()
 
def go():
  txt = 'Label1控件的位置信息如下:%s' % label1.winfo_geometry()
  label2.configure(text=txt)
  root.after(1,go)
 
root = tk.Tk()
root.title('测试窗口')
center_window(root, 500, 340)
label1 = tk.Label(root, text='测试用途的Label控件')
label1.pack(expand=tk.YES)
label2 = tk.Label(root)
label2.pack()
go()
root.mainloop()

主要用到的函数为:label1.winfo_geometry()

运行的效果如下:

python中tkinter窗口位置\坐标\大小等实现示例

到此这篇关于python中tkinter窗口位置\坐标\大小等实现示例的文章就介绍到这了,更多相关python中tkinter窗口位置\坐标\大小内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解django中自定义标签和过滤器
Jul 03 Python
Python调用服务接口的实例
Jan 03 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
Django的models模型的具体使用
Jul 15 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
基于python调用psutil模块过程解析
Dec 20 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
pytorch使用tensorboardX进行loss可视化实例
Feb 24 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Python datetime 如何处理时区信息
Sep 02 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 #Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 #Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 #Python
python求解汉诺塔游戏
Jul 09 #Python
Django中Aggregation聚合的基本使用方法
Jul 09 #Python
Python  word实现读取及导出代码解析
Jul 09 #Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 #Python
You might like
PHP利用COM对象访问SQLServer、Access
2006/10/09 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
js 目录列举函数
2008/11/06 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Pytorch训练过程出现nan的解决方式
2020/01/02 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
html5清空画布方法(三种)
2017/10/16 HTML / CSS
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
最新会计专业求职信范文
2014/01/28 职场文书
群众路线党课主持词
2014/04/01 职场文书
道歉的话怎么说
2015/05/12 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
运动会运动员赞词
2015/07/22 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android