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计算一个序列的平均值的方法
Jul 11 Python
python八大排序算法速度实例对比
Dec 06 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
numpy求平均值的维度设定的例子
Aug 24 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
Python hashlib模块的使用示例
Oct 09 Python
Pygame Event事件模块的详细示例
Nov 17 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数组合并array_merge()函数使用注意事项
2014/06/19 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
python按照多个条件排序的方法
2019/02/08 Python
python里dict变成list实例方法
2019/06/26 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
求职面试个人自我评价
2014/02/28 职场文书
校运会口号
2014/06/18 职场文书
计划生育宣传标语
2014/06/21 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
学习保证书
2015/01/17 职场文书
论文致谢词范文
2015/05/14 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书