ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5.Tkinter主窗口

2022-07-31 19:33:47  阅读:170  来源: 互联网

标签:控件 winfo 窗口 window tk 设置 Tkinter


主窗口控件(window)是一切控件的基础,它好比是一台高速运转的机器,而其他控件则相当于这台机器上的部件,比如齿轮、链条、螺丝等等。由此我们知道,主窗口是一切控件的基础,所有的控件的都需要通过主窗口来显示。

Tkinter 提供了一些关于主窗口对象的常用方法,在本节对这些方法做简单的介绍。

创建一个空白窗口

Tkinter 能够很方便地创建一个空白窗口,示例代码如下:

  1. # 导入tk
  2. from tkinter import *
  3. # 创建一个主窗口对象
  4. window = Tk()
  5. # 调用mainloop()显示主窗口
  6. window.mainloop()

程序运行结果如下:

tkinter运行结果
图1:程序运行结果

1) 窗口常用方法

下表列出了窗口的常用方法,其中 window 代表主窗口对象:

函数 说明
window.title("my title") 接受一个字符串参数,为窗口起一个标题
window.resizable() 是否允许用户拉伸主窗口大小,默认为可更改,当设置为 resizable(0,0)或者resizable(False,False)时不可更改
window.geometry() 设定主窗口的大小以及位置,当参数值为 None 时表示获取窗口的大小和位置信息。
window.quit() 关闭当前窗口
window.update() 刷新当前窗口
window.mainloop() 设置窗口主循环,使窗口循环显示(一直显示,指导窗口被关闭)
window.iconbitmap() 设置窗口左上角的图标(图标是.ico文件类型)
window.config(background ="red") 设置窗口的背景色为红色,也可以接受 16 进制的颜色值
window.minsize(50,50) 设置窗口被允许调整的最小范围,即宽和高各50
window.maxsize(400,400) 设置窗口被允许调整的最大范围,即宽和高各400
window.attributes("-alpha",0.5) 用来设置窗口的一些属性,比如透明度(-alpha)、是否置顶(-topmost)即将主屏置于其他图标之上、是否全屏(-fullscreen)全屏显示等
window.state("normal") 用来设置窗口的显示状态,参数值 normal(正常显示),icon(最小化),zoomed(最大化),
window.withdraw() 用来隐藏主窗口,但不会销毁窗口。
window.iconify() 设置窗口最小化
window.deiconify() 将窗口从隐藏状态还原
window.winfo_screenwidth()
window.winfo_screenheight()
获取电脑屏幕的分辨率(尺寸)
window.winfo_width()
window.winfo_height() 
获取窗口的大小,同样也适用于其他控件,但是使用前需要使用 window.update() 刷新屏幕,否则返回值为1
window.protocol("协议名",回调函数) 启用协议处理机制,常用协议有 WN_DELETE_WINDOW,当用户点击关闭窗口时,窗口不会关闭,而是触发回调函数。


下面通一个示例对上述表格中的常用方法做简单地介绍:

  1. import tkinter as tk
  2.  
  3. window =tk.Tk()
  4. #设置窗口title
  5. window.title('C语言中文网')
  6. #设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x"
  7. window.geometry('450x300')
  8. # 获取电脑屏幕的大小
  9. print("电脑的分辨率是%dx%d"%(window.winfo_screenwidth(),window.winfo_screenheight()))
  10. # 要求窗口的大小,必须先刷新一下屏幕
  11. window.update()
  12. print("窗口的分辨率是%dx%d"%(window.winfo_width(),window.winfo_height()))
  13. # 如使用该函数则窗口不能被拉伸
  14. # window.resizable(0,0)
  15. # 改变背景颜色
  16. window.config(background="#6fb765")
  17. # 设置窗口处于顶层
  18. window.attributes('-topmost',True)
  19. # 设置窗口的透明度
  20. window.attributes('-alpha',1)
  21. # 设置窗口被允许最大调整的范围,与resizble()冲突
  22. window.maxsize(600,600)
  23. # 设置窗口被允许最小调整的范围,与resizble()冲突
  24. window.minsize(50,50)
  25. #更改左上角窗口的的icon图标,加载C语言中文网logo标
  26. window.iconbitmap('C:/Users/Administrator/Desktop/favicon.ico')
  27. #添加文本内容,并对字体添加相应的格式 font(字体,字号,"字体类型")
  28. text=tk.Label(window,text="C语言中文网,网址:c.biancheng.net",bg="yellow",fg="red",font=('Times', 15, 'bold italic underline'))
  29. #将文本内容放置在主窗口内
  30. text.pack()
  31. # 添加按钮,以及按钮的文本,并通过command 参数设置关闭窗口的功能
  32. button=tk.Button(window,text="关闭",command=window.quit)
  33. # 将按钮放置在主窗口内
  34. button.pack(side="bottom")
  35. #进入主循环,显示主窗口
  36. window.mainloop()

程序的输出结果:

电脑的分辨率是1366x768
窗口的分辨率是450x300

程序运行效果图:

tkinter GUI
图2:程序运行结果

2) protocol协议处理机制

Tinter 除了提供事件绑定机制之外,还提供了协议处理机制,它指的是应用程序和窗口管理器之间的交互,最常用的协议为 WM_DELETE_WINDOW。

当 Tkinter 使用 WM_DELETE_WINDOW 协议与主窗口进行交互时,Tkinter 主窗口右上角x号的关闭功能失效,也就是无法通过点击x来关闭窗口,而是转变成调用用户自定义的函数。

下面看一组简单的示例:

  1. from tkinter import Tk
  2. # 导入 对话框控件
  3. from tkinter import messagebox
  4.  
  5. # 创建主窗口
  6. root = Tk()
  7. # 定义回调函数,当用户点击窗口x退出时,执行用户自定义的函数
  8. def QueryWindow():
  9. # 显示一个警告信息,点击确后,销毁窗口
  10. if messagebox.showwarning("警告","出现了一个错误"):
  11. # 这里必须使用 destory()关闭窗口
  12. root.destroy()
  13.  
  14. # 使用协议机制与窗口交互,并回调用户自定义的函数
  15. root.protocol('WM_DELETE_WINDOW', QueryWindow)
  16. root.mainloop()

程序运行结果:

tkinter程序
图3:程序运行结果


通过封装函数的形式来执行相应的 GUI 控件功能,这在学习 Tkinter 编程的整个过程中非常常见,比如 Button 控件的command参数也可以执行回调函数,如下所示:

  1. import tkinter as tk
  2. # 定义窗口
  3. window = tk.Tk()
  4. window.title('c语言中文网')
  5. window.geometry('300x300')
  6. window.iconbitmap('C:/Users/Administrator/Desktop/favicon.ico')
  7. # 定义回调函数
  8. def callback():
  9.     print("执行回调函数","C语言中文网欢迎您")
  10.  
  11. # 点击执行按钮
  12. button = tk.Button(window, text="执行", command=callback)
  13. button.pack()
  14. window.mainloop()

点击窗口内的“执行”按钮,运行结果如下:

执行回调函数 C语言中文网欢迎您

设置窗的位置

当我们运行 Tkinter 程序时,主窗口都会出现在距离屏幕左上角指定的位置上,这是由 Tkinter 软件包默认设置的。但是在许多情况下,我们需要根据实际情况来移动窗口在电脑屏幕上的位置,这时应该如何处理呢?其实很简单,通过窗口对象的 geometry() 方法即可改变主窗口的位置,其语法格式如下:

geometry('450x400+300+200')

上述代码表示,设置主窗口的宽度为 450,高度为 400,同时窗口距离左边屏幕的距离为 300(以像素为单位),距离屏幕顶部的距离为 200,这里我们将带“+”的参数值称为“位置参数”,当然,您也可以将它们设置为负数,如下所示:

geometry('+-1500+-2000')

当设置了一个超过屏幕的负参数值时,主窗口会被移动至“屏幕之外”,此时就看不到主窗口了,这也是隐藏窗口的一种方法。

下面看一组简单的示例:

  1. import tkinter as tk
  2.  
  3. window = tk.Tk()
  4. window.title('c语言中文网')
  5. window.iconbitmap('C:/Users/Administrator/Desktop/favicon.ico')
  6. # 设置窗口大小变量
  7. width = 300
  8. height = 300
  9. # 窗口居中,获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
  10. screenwidth = window.winfo_screenwidth()
  11. screenheight = window.winfo_screenheight()
  12. size_geo = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
  13. window.geometry(size_geo)
  14. window.mainloop()

程序运行后窗口将出现在屏幕的中间位置,如下所示:

tkinter教程
图4:程序运行结果

标签:控件,winfo,窗口,window,tk,设置,Tkinter
来源: https://www.cnblogs.com/55zjc/p/16537915.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有