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 相关文章推荐
ssh批量登录并执行命令的python实现代码
May 25 Python
收集的几个Python小技巧分享
Nov 22 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
Python 实现域名解析为ip的方法
Feb 14 Python
解决python有时候import不了当前的包问题
Aug 28 Python
python实现贪吃蛇游戏源码
Mar 21 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 Python
python opencv通过按键采集图片源码
May 20 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类包含的七种语法说明
2015/06/04 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
js获取form的方法
2015/05/06 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
外贸销售员求职的自我评价
2013/11/23 职场文书
函授本科自我鉴定
2014/02/04 职场文书
医院工作检讨书范文
2014/02/10 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
美容院营销方案
2014/03/05 职场文书
爱国演讲稿500字
2014/05/04 职场文书
学校师德师风整改方案
2014/10/28 职场文书
班主任工作实习计划
2015/01/16 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
Python几种酷炫的进度条的方式
2022/04/11 Python