tkinter(窗口和对话框)

创建新的顶级窗口与创建新的小部件几乎完全相同。顶级窗口是使用顶级类创建的:t = Toplevel(parent)

与常规的小部件不同,我们不必为它在屏幕上的显示设置顶层网格。一旦我们创建了一个新的顶层,我们就可以创建其他小部件作为该顶层的子级,并在顶层中对它们进行网格化。新顶层的行为与自动创建的根窗口完全相同。

要销毁窗口,请使用其销毁方法:window.destroy()

请注意,您可以在任何小部件上使用destroy,而不仅仅是顶级窗口。销毁窗口时,作为该窗口子窗口的所有窗口(小部件)也将被销毁。小心!如果您破坏了根窗口(所有其他小部件都是从根窗口派生出来的),那么将终止您的应用程序。

1. 窗口的行为和风格

1.1 窗口标题

要检查或更改窗口的标题,请执行以下操作:

oldtitle =window.title()

window.title('New title')

1.2 尺寸和位置

在Tk中,窗口在屏幕上的位置和大小称为其几何图形。宽度和高度(通常以像素为单位)是不言自明的。x(水平位置)用前导加号或减号指定,因此+25表示窗口左边缘距屏幕左边缘25像素,而-50表示窗口右边缘距屏幕右边缘50像素。类似地,y(垂直)位置为+10表示窗口的上边缘应低于屏幕顶部10个像素,而-100表示窗口的下边缘应高于屏幕底部100个像素。

window.geometry('300x200-5+5') #改变大小和位置。它将窗口放置在屏幕的右上角

可以用相同的方法检索当前几何体;只是不提供新的几何体值。但是,如果在更改几何体后立即尝试,您会发现它不更新。请记住,所有绘图都有效地发生在后台,通过事件循环响应空闲时间。在绘制之前,窗口的内部几何图形不会更新。如果你真的想强迫事情立即更新,你可以使用语句:window.update_idletasks()

1.3 调整大小行为

默认情况下,用户可以调整顶层窗口(包括根窗口)的大小。但是,有时您可能希望阻止用户调整窗口的大小。您可以通过resizable方法来实现这一点。它的第一个参数控制用户是否可以更改宽度,第二个参数控制用户是否可以更改高度。所以要禁用所有调整大小:window.resizable(FALSE,FALSE)

如果窗口可调整大小,则可以指定希望将窗口大小约束到的最小和/或最大大小(同样,参数是宽度和高度):

window.minsize(200,100)

window.maxsize(500,500)

想知道如果你没有指定它的几何图形,或者用户没有调整它的大小,它会有多大?您可以检索窗口请求的大小,即它从几何图形管理器请求的空间量。与绘图一样,几何计算只在事件循环的空闲时间进行,因此在小部件出现在屏幕上之前,您不会得到有用的响应。window.winfo_reqwidth() # or winfo_reqheight

1.4 拦截关闭按钮

大多数窗口的标题栏中都有“关闭”按钮。默认情况下,如果用户单击该按钮,Tk将销毁该窗口。但是,您可以提供一个将运行的回调进行拦截。window.protocol("WM_DELETE_WINDOW",callback)

1.5 透明度

可以通过指定alpha通道使窗口部分透明,范围从0.0(完全透明)到1.0(完全opqaque)。

window.attributes("-alpha", 0.5)

1.6 全屏

window.attributes("-fullscreen", 1)

1.7 图标化与提取

在大多数系统上,可以通过图标化将窗口从屏幕中临时删除。在Tk中,窗口是否被图标化被称为窗口的状态。窗口的可能状态包括正常和图标(对于图标化的窗口),以及其他几种状态:withdrawn, icon 或 zoomed。

您可以直接查询或设置当前窗口状态。还有iconify、deiconify和withdraw方法,它们分别是设置iconic, normal, 和withdrawn 状态的快捷方式。

thestate =window.state()

window.state('normal')

window.iconify()

window.deiconify()

window.withdraw()

1.8 堆叠顺序

堆叠顺序是指窗口从下到上“放置”在屏幕上的顺序。当两个窗口的位置相互重叠时,靠近堆叠顺序顶部的窗口将遮挡或重叠堆叠顺序中较低的窗口。

可以确保窗口始终位于堆叠顺序的顶部(或至少位于未设置此属性的所有其他窗口的顶部):

window.attributes("-topmost", 1)

您可以找到从最低到最高列出的当前堆叠顺序:

root.tk.eval('wm stackorder '+str(window))

这种方法在Tkinter中没有清晰地公开。它返回每个窗口的内部名称,而不是窗口对象。

您也可以只检查一个窗口是高于还是低于另一个窗口:

if (root.tk.eval('wm stackorder '+str(window)+' isabove '+str(otherwindow))=='1') ...

if (root.tk.eval('wm stackorder '+str(window)+' isbelow '+str(otherwindow))=='1') ...

您也可以将窗口升高或降低到堆叠顺序的最顶部(底部),或刚好位于指定窗口的上方(下方):

window.lift()

window.lift(otherwin)

window.lower()

window.lower(otherwin)

1.9 屏幕信息

您可以确定屏幕的颜色深度(每像素多少位)和颜色模型(在现代显示器上通常为真彩色)、像素密度和分辨率。

print("color depth=" + str(root.winfo_screendepth())+ " (" + root.winfo_screenvisual() + ")")

print("pixels per inch=" + str(root.winfo_pixels('1i')))

print("width=", str(root.winfo_screenwidth()) + " height=", str(root.winfo_screenheight()))

2. 对话框

对话框是应用程序中使用的一种窗口类型,用于从用户处获取某些信息、通知他们发生了某些事件、确认操作等。

2.1 选择文件和目录

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

推荐阅读更多精彩内容