用Tkinter打造GUI开发工具(5)Toplevel弹出窗口
Tkinter的root.Toplevel()方法可以创建一个弹出窗口。Toplevel()方法的含义是建立在Tk()主窗口上面的顶层窗口,我们本书称为弹出窗口PopWindow。因为它为我们提供了很多高级功能,例如独立窗口工具栏,信息气泡等等都是用Toplevel()方法实现的,就像大窗口中弹出的小窗口。
Tkinter只有一个 Tk()主窗口root,可以建立无数个Toplevel()窗口PopWindow。
Toplevel()窗口拥有Tk()主窗口几乎所有方法,唯一不同的方法是destroy()方法。
Toplevel()窗口的PopWindow.destroy()方法,只销毁所有在PopWindow窗口上建立的小部件,和PopWindow窗口本身,即关闭PopWindow窗口。不影响Tk()主窗口和其它的PopWindow窗口。
Tk()主窗口的root.destroy()方法,会上删除所有Tkinter的部件,包括所有的Toplevel()窗口和Tk()主窗口。会停止mainloop()方法,终止Tkinter程序运行。
Toplevel()窗口的方法同Tk()主窗口方法,前面都介绍过了,这里就不多说了。下面看一个示例,读者体会关闭Tk窗口,和popWindow窗口,Tkinter程序会有什么不同。
# -*- coding: utf-8 -*-
import tkinter as tk #导入Tkinter模块,仅用于Python3
root =tk.Tk() #建立Tkinter主窗口root
root.title(' Tk窗口')
root.geometry('{}x{}+{}+{}'.format(300, 200, 100, 200)) #改变窗口位置和大小
root.attributes('-topmost',1) #参数1,设置顶层窗口,覆盖其它窗口。
popWindow=tk.Toplevel(root)
popWindow.title('Toplevel窗口')
popWindow.geometry('{}x{}+{}+{}'.format(300, 200, 450, 200)) #改变窗口位置和大小
popWindow.attributes("-toolwindow", 1) #参数1,设置工具栏样式窗口。
popWindow.attributes('-topmost',1) #参数1,设置顶层窗口,覆盖其它窗口。
popWindow2=tk.Toplevel(root)
popWindow2.title('Toplevel窗口2')
popWindow2.geometry('{}x{}+{}+{}'.format(300, 200, 800, 200)) #改变窗口位置和大小
popWindow2.attributes('-topmost',1) #参数1,设置顶层窗口,覆盖其它窗口。
root.mainloop() #Tkinter的mainloop()方法
Toplevel()窗口的方法同Tk()主窗口方法,我们不重复介绍了。下来要解决程序设计中经常遇到的问题。
设置窗口大小的方法有了,如果不改变窗口到小,仅仅将窗口自动在屏幕中居中的函数。
#自动移动窗口到屏幕中央
def setCenter(window,w=0,h=0):
ws = window.winfo_screenwidth() #获取屏幕宽度(单位:像素)
hs = window.winfo_screenheight() #获取屏幕高度(单位:像素)
if (w==0 or h==0):
w = window.winfo_width() #获取窗口宽度(单位:像素)
h = window.winfo_height() #获取窗口高度(单位:像素)
x = int( (ws/2) - (w/2) )
y = int( (hs/2) - (h/2) )
window.geometry('{}x{}+{}+{}'.format(w, h, x, y))
完整的演示程序如下:
# -*- coding: utf-8 -*-
import tkinter as tk #导入Tkinter模块,仅用于Python3
#移动窗口到屏幕中央
def setCenter(window,w=0,h=0):
ws = window.winfo_screenwidth()
hs = window.winfo_screenheight()
if (w==0 or h==0):
w = window.winfo_width() #获取窗口宽度(单位:像素)
h = window.winfo_height() #获取窗口高度(单位:像素)
x = int( (ws/2) - (w/2) )
y = int( (hs/2) - (h/2) )
window.geometry('{}x{}+{}+{}'.format(w, h, x, y))
root =tk.Tk() #建立Tkinter主窗口root
root.title(' Tk窗口')
root.geometry('{}x{}+{}+{}'.format(300, 200, 100, 200)) #改变窗口位置和大小
root.attributes('-topmost',1) #参数1,设置顶层窗口,覆盖其它窗口。
popWindow=tk.Toplevel(root)
popWindow.title('Toplevel窗口')
popWindow.geometry('{}x{}+{}+{}'.format(300, 200, 450, 200)) #改变窗口位置和大小
popWindow.attributes("-toolwindow", 1) #参数1,设置工具栏样式窗口。
popWindow.attributes('-topmost',1) #参数1,设置顶层窗口,覆盖其它窗口。
setCenter(popWindow) #把popWindow窗口移动到屏幕中央
root.mainloop() #Tkinter的mainloop()方法
程序运行后,通过 setCenter(popWindow)语句,把popWindow窗口移动到屏幕中央。