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 选择文件和目录

你可能感兴趣的:(tkinter(窗口和对话框))