正在尝试着做一个比较完善的画图软件,计划使用tkinter库中的canvas控件来做,然后正在攻关图形项位置、坐标、大小及其他属性项的保存和加载的问题,刚好需要用到坐标、位置的知识,因此作为这个画图软件的附带产出物,整理成了本篇博文,分享给大家,一起研究研究,期待能对你工作带来启发和帮助。
不忘初心,方得始终,让我们一起共勉!
好的,言归正传,回归本篇博文的主题:python中tkinter窗口位置|坐标\大小等知识的科普。
大家都知道tkinter库中有很多控件和主窗口,因此这些控件和主窗口都有对应的屏幕坐标的信息。因此我们可以分别进行介绍。
一、关于主窗口的介绍:
我们见的比较多的命令如下:
root.geometry("300x200+100+50")
这是什么意思呢?
其实:第一个是指窗口的宽度,第二个窗口的高度,第三个窗口左上点离左屏幕边界距离,第四个窗口左上点离上面屏幕边界距离。 那么,放在整段代码里如下:
from tkinter import * root = Tk() root.geometry("300x200+100+50") root.mainloop()
显示效果如下:
(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()
运行效果如下:
(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()
(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()
运行的效果如下:
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】
- 群星.2008-本色·百代音乐人创作专辑【EMI百代】【WAV+CUE】
- 群星.2001-同步过冬AVCD【环球】【WAV+CUE】
- 群星.2020-同步过冬2020冀待晴空【环球】【WAV+CUE】
- 沈雁.1986-四季(2012梦田复刻版)【白云唱片】【WAV+CUE】
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[FLAC/分轨][257.88MB]
- 《国语老歌 怀旧篇 3CD》[WAV/分轨][1.6GB]