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 23 Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
python数据结构之链表详解
Sep 12 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
python 递归相关知识总结
Mar 03 Python
Python 调用C++封装的进一步探索交流
Mar 04 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php判断当前操作系统类型
2015/10/28 PHP
php json转换相关知识(小结)
2018/12/21 PHP
javascript第一课
2007/02/27 Javascript
原生js和jquery实现图片轮播特效
2015/04/23 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
安装dbus-python的简要教程
2015/05/05 Python
Djang中静态文件配置方法
2015/07/30 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Python如何测试stdout输出
2020/08/10 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
给国外客户的邀请函
2014/01/30 职场文书
接待员岗位责任制
2014/02/10 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
党员一帮一活动总结
2014/07/08 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
活着观后感
2015/06/03 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
MySQL 数据类型选择原则
2021/05/27 MySQL