美文网首页
tkinter(窗口和对话框)

tkinter(窗口和对话框)

作者: W无花果W | 来源:发表于2021-05-03 07:31 被阅读0次

    创建新的顶级窗口与创建新的小部件几乎完全相同。顶级窗口是使用顶级类创建的: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(窗口和对话框)

          本文链接:https://www.haomeiwen.com/subject/dodarltx.html