geometry()参数的含义:
“窗口宽x窗口高+窗口位于屏幕x轴+窗口位于屏幕y轴”
#!/usr/bin/python #-*-coding:utf-8 -*- import tkinter top = tkinter.Tk() #这里四个参数分别为:宽、高、左、上 top.geometry("500x300+750+200") top.title("www.tianqiweiqi.com") top.mainloop();
接着来实现真正的窗口居中
我们要修改窗口位置和修改窗口大小,要用到是tk对象提供的geometry方法。
该方法的用法是geometry(字符串),这个字符串格式为:
“窗口宽x窗口高+窗口位于屏幕x轴+窗口位于屏幕y轴”
当然,我们可以只设置窗口大小或者是只设置窗口的x轴和y轴。
例如geometry(“100×100”)或者geometry(“+10+10”)
要想设置屏幕居中,我们还需要获得屏幕大小(即分辨率)
我们可以通过tk对象提供的winfo_screenwidth方法和winfo_screenheight方法来获得屏幕宽度和高度(分辨率)
窗口居中在屏幕的算法如下:
屏幕宽 – 窗口宽 = 窗口两边的宽度(记得是两边,仔细想想)
然后我们除于一半得到屏幕左边的宽度,这就是我们窗口位于屏幕x轴开始的位置。
看代码仔细想就能理解:
#-*- coding:utf-8 -*- import tkinter win = tkinter.Tk() sw = win.winfo_screenwidth() #得到屏幕宽度 sh = win.winfo_screenheight() #得到屏幕高度 ww = 100 wh = 100 #窗口宽高为100 x = (sw-ww) / 2 y = (sh-wh) / 2 win.geometry("%dx%d+%d+%d" %(ww,wh,x,y)) win.mainloop()
如果设置标题用win.title(“窗口标题”),运行如下:
注意:top.geometry(“500×300+750+200”)
这里是小写字母x,而不是大写X或乘号叉号。
打错了,出提示如下错误信息:
_tkinter.TclError: bad geometry specifier "200×100"
也可以写个center_window函数封装一下:
def center_window(self, cont, width, height): screenwidth = cont.winfo_screenwidth() screenheight = cont.winfo_screenheight() size = "%sx%s+%s+%s" % ( width, height, (screenwidth - width) / 2, (screenheight - height) / 2) return size
#!/usr/bin/env python #coding=utf-8 import tkinter as tk from tkinter import ttk def get_screen_size(window): return window.winfo_screenwidth(),window.winfo_screenheight() def get_window_size(window): return window.winfo_reqwidth(),window.winfo_reqheight() def center_window(root, width, height): screenwidth = root.winfo_screenwidth() screenheight = root.winfo_screenheight() size = '%dx%d+%d+%d' % (width, height, (screenwidth - width)/2, (screenheight - height)/2) print(size) root.geometry(size) root = tk.Tk() root.title('测试窗口') center_window(root, 300, 240) root.maxsize(600, 400) root.minsize(300, 240) ttk.Label(root, relief = tk.FLAT, text = '屏幕大小(%sx%s)\n窗口大小(%sx%s)' % (get_screen_size(root) + get_window_size(root))).pack(expand = tk.YES) tk.mainloop()