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 相关文章推荐
给Python初学者的一些编程技巧
Apr 03 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
详解python eval函数的妙用
Nov 16 Python
聊聊Python中的pypy
Jan 12 Python
详解Django之auth模块(用户认证)
Apr 17 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
Linux 修改Python命令的方法示例
Dec 03 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 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 CKEditor 上传图片实现代码
2009/11/06 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
yii分页组件用法实例分析
2015/12/28 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
JavaScript 变量命名规则
2009/09/23 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
python安装Scrapy图文教程
2017/08/14 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
python解包概念及实例
2021/02/17 Python
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
2014年学校团委工作总结
2014/12/20 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
保险公司增员口号
2015/12/25 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android
Oracle 死锁的检测查询及处理
2021/09/25 Oracle