tkinter设置窗体属性及获取窗体属性

这篇文章,我来讲讲在tkinter编程中,如何为窗体的属性赋值,以及获取窗体属性值的方法。

了解窗体有什么属性

窗体有属性可以设置,我们可以用 keys() 方法来查看一下。

以下代码中 print(root.keys()) 功能就是在终端输出窗体root可以设置的属性。完整代码如下:

from tkinter import *
root=Tk()
print(root.keys())   # 输出窗体的属性
root.mainloop() </pre>

在我的电脑里(windows 10 系统)输出结果如下:

['bd', 'borderwidth', 'class', 'menu', 'relief', 'screen', 'use', 'background', 'bg', 'colormap', 'container', 'cursor', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'padx', 'pady', 'takefocus', 'visual', 'width']

看上去窗体有很多属性,但是,我们平时常用的属性值就那么几个,其它不太常用的属性设置,我们可以暂时不用管它们。

用config()方法设置窗体属性

为窗体属性以及组件(控件)属性设置的方法有2种。第1种方法是用config() 或 configure()

root.config(bg='yellow',cursor='hand2',width=200,height=100) 
root.configure(bg='yellow',cursor='hand2',width=200,height=100)

以上两句代码,作用是一样的,(以后就我就采用config()方法)上面代码作用就是让窗口背景设置为黄色,窗口范围内的鼠标形态变成手形,宽度为200,高度为100。

全部代码,如下

from tkinter import *
root=Tk()
root.config(bg='yellow',cursor='hand2',width=200,height=100) 
root.mainloop()

我们来运行一下看看结果:

form1.PNG

用config()方法,可以一次为1个或多个属性进行设置。

通过字典键设置窗体属性

这种方法只可为一个属性单独设置。如:

root['bg']='yellow'
root['cursor']='hand2'
root['width']=200
root['height']=100

这种方法,如果为一个不存在的属性设置,就会被 系统报TclError 错误。

获取窗体属性之方法1

将上面讲解的用字典键来设置窗体方法改一下,去=号,不赋值,就可以得到属性值。如:

root['bg']      # 获取窗体背景颜色
root['cursor']   # 获取窗体的鼠标样式

我们可以把获取的属性性赋值给别的变量,或者直接打印出来。

from tkinter import *
root=Tk()
root['height']=300
root['bg']='red'
root['cursor']='hand2'
print(root['height'])
print(root['bg'])
print(root['cursor'])
root.mainloop()

上面代码中,我们可以用print把窗体的属性值打印出来。
注意,如果窗体没有设定属性值,用这种方法,无法得到正确的值。我们把3,4,5句代码去除,再运行一下,就会发现输出结果提示错误。

获取窗体属性值之方法2

第二种方法,是用cget() 方法来获取窗体属性值 。如:

root.cget('height')
root.cget('bg')
root.cget('cursor')

同样,我们也可以把获取的属性性赋值给别的变量,或者直接打印出来。

from tkinter import *
root=Tk()
root.config(height=100,bg='red',cursor='hand2')
print(root.cget('height'))
print(root.cget('bg'))
print(root.cget('cursor'))
root.mainloop()

上面代码中,我们可以用print把窗体的属性值打印出来。

注意,这种方法跟第1种方法一样,如果窗体没有设定属性值,就无法得到正确的属性值。我们把第3句代码去除,再运行一下,就会发现,输出结果提示错误。

总结:上述的2种设置属性方法和2种设置属性方法对于后面要讲解的组件(在其它的编程语言里,组件也叫控件),也一样管用。

其它方法获取窗体的宽和高

root.winfo_width() # 获取窗体的宽

root.winfo_height() # 获取窗体的高

我们用下面的代码输出窗体宽和高

root=Tk()
root.geometry('300x150+888+444') # 设置窗体大小和位置
root.update()  # 刷新窗体
print(root.winfo_width())  # 输出窗体宽
print(root.winfo_height()) # 输出窗体高
root.mainloop()

注意第4行代码,这是刷新窗体语句,缺少这句,输出的结果不正确,一定要加上这行代码才行。

去除第3行设置窗体大小的代码,一样可以得到窗体的宽和高。姭嚞灬

其它方法获取窗体的位置

root.winfo_x() # 获取窗体左边距

root.winfo_y() # 获取窗体上边距

用下面的代码输出窗体的位置:

from tkinter import *
root=Tk()
root.geometry('300x150+888+444') # 设置窗体大小和位置
root.update()  # 刷新窗体
print(root.winfo_x())  # 输出窗体左边距
print(root.winfo_y()) # 输出窗体上边距
root.mainloop()

tkinter窗体居中显示的代码

上一篇文章,简单讲解了窗体的在屏幕位置的设置,这里,稍详细一下。设置窗体位置的代码如:

root.geometry('±100±200')

第1个参数为:+数值,表示窗口左边离屏幕左边的距离
    -数值,表示窗口右边离屏幕右边的距离

第2个参数为:+数值,表示窗口上边离屏幕上边的距离
    -数值,表示窗口下边离屏幕下边的距离

大家自行把上面代码的第三行代码改成下面的其中一条代码,查看窗体在屏幕的不同位置。

root.geometry('+100+200')  # 窗体在屏幕左上角
root.geometry('-100-200')  # 窗体在屏幕右下角
root.geometry('+100-200')  # 窗体在屏幕左下角
root.geometry('-100+200')  # 窗体在屏幕右上角

但在实际的程序编写中,让窗体居中显示可能更有实用性。代码如下:

a,b=300,150       # a为窗体宽度,b为窗体的高度
c=(root.winfo_screenwidth()-a)/2    # (屏幕宽度-窗体宽度)/2
d=(root.winfo_screenheight()-b)/2   # (屏幕高度-窗体高度)/2
root.geometry('%dx%d+%d+%d' % (a,b,c,d)) # c为窗口左边离屏幕左边的距离,d为窗口上边离屏幕上边的距离

以上tkinter窗口居中显示代码你可以收藏起来,使用时,只要改一下a,b的数值设置就可以行了。

解释:

root.geometry('%dx%d+%d+%d' % (a,b,c,d)) 这一代码需要你懂得python的字符串格式化知识,这里是使用%操作符来格式化字符串。

root.winfo_screenwidth() 为获取屏幕的宽度,括号不能省

root.winfo_screenheight() 为获取屏幕的高度,括号不能省。

下一篇文章,讲解tkinter的组件(组件英文为: widget),先讲“标签”组件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容