01-Tkinter教程-窗口的管理与设置

官方用的GUI工具包——Tkinter(IDLE就是用这个开发的)。

Tkinter是Python的标准GUI库,它实际是建立在Tk技术上的。在大多数Unix平台以及Windows系统上都可用。

作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多直观的功能,比如想开发一个计算器,如果只是一个键盘输入,输出的黑色窗口,是没用用户体验的。所有开发一个图像化的小窗口,就是必要的。

对于稍有GUI编程经验的人来说,Python的Tkinter界面库是非常简单的。python的GUI库非常多,选择Tkinter,一是最为简单,二是自带库,不需下载安装,随时使用,三则是从需求出发,Python作为一种脚本语言,或者说一种胶水语言,一般不会用它来开发复杂的桌面应用,它并不具备这方面的优势,使用Python,可以把它作为一个灵活的工具,而不是作为主要开发语言,那么在工作中,需要制作一个小工具,肯定是需要有界面的,不仅自己用,也能分享别人使用,在这种需求下,Tkinter是足够胜任的!

Tkinter是Python默认的GUI库,像IDLE就是用Tkinter设计出来的,因此直接导入Tkinter模块就可以了:

 

import tkinter

1|1Tkinter之初体验

接下来从最简单的例子入手:

 

import tkinter as tk # 创建一个主窗口,用于容纳整个GUI程序 root = tk.Tk() # 设置主窗口对象的标题栏 root.title("First Demo") # 设置窗口大小 root.geometry('500x300+100+100') # 添加一个Label组件,Label组件是GUI程序中最常用的组件之一。 # Label组件可以显示文本、图标或者图片 # 在这里我们让它显示指定文本 theLabel = tk.Label(root, text="我的第一个tkinter窗口!") # 然后调用Label组件的pack()方法,用于自动调节组件自身的尺寸 theLabel.pack() # 注意,这时候窗口还是不会显示的… # 除非执行下面这条代码! root.mainloop()

执行程序,如图所示。

loop因为是循环的意思,root.mainloop就会让root不断的刷新,如果没有mainloop,就是一个静态的root,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环。
所有的窗口文件都必须有类似的mainloop函数,mainloop是窗口文件的关键的关键。

意思是一旦进入了主事件循环,就由Tkinter掌管一切了。现在不理解没关系,在后面的学习中你会有深刻的体会。GUI程序的开发与以往的开发经验会有截然不同的感受。

通常如果要写一个比较大的程序,那么应该先把代码给封装起来。在面向对象的编程语言中,就是封装成类。看下面进阶版的例子:

 

import tkinter as tk def create_button(root): # 创建一个按钮组件 # fg 是 foreground 的缩写, 就是设置前景色的意思 say_hello = tk.Button(root, text='打招呼', fg='blue', command=eat) say_hello.pack() return root def eat(): print('今天你吃饭了吗?') root = tk.Tk() app = create_button(root) root.mainloop()

程序跑起来后出现一个“打招呼”按钮,单击它就能从IDLE接收到回馈信息,如图15-3所示。

1|2窗口的管理与设置

不知道大家是否注意到了,上述举例的简单demo程序存在窗口显示混乱的情况,这样的一个界面显然是不符合我们要求的。所以我们首先要开始学习如何使用tkinter去控制我们的窗口

基本属性设置

1.添加标题

 

# 设置窗口标题 root.title("title")

2.添加图标

 

# 设置图标,以OneDrive图标为例,必须是以 .ico 为后缀的图标文件,放于同目录下。 root.iconbitmap("OneDrive.ico")

3.设置背景

 

# 设置背景色,可以用英文名,也可以用十六进制表示的颜色。 root["background"] = "#00ffff"

完整代码

 

# 导入模块,取别名 import tkinter as tk # 实例化一个窗体对象 root = tk.Tk() # 设置窗口的大小长宽为300x300出现的位置距离窗口左上角+150+150 root.geometry("300x300+150+150") # 设置窗口标题 root.title("title") # 设置图标,以OneDrive图标为例,必须是以 .ico 为后缀的图标文件,放于同目录下。 root.iconbitmap("OneDrive.ico") # 设置背景色,可以用英文名,也可以用十六进制表示的颜色。 root["background"] = "#00ffff" # 进入消息循环,显示窗口 root.mainloop()

效果演示

外形设置

1.设置透明度

 

# 透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明 root.attributes("-alpha", 0.6)

2.设置工具栏样式

 

# True 只有退出按钮,也没有图标;False 正常的窗体样式 root.attributes("-toolwindow", True)

效果演示

3.设置全屏

 

# True 全屏;False 正常显示 root.attributes("-fullscreen", True)

4.窗口置顶

 

# True 所有窗口中处于最顶层;False 正常显示 两个同时被置顶的窗口为同级(能互相遮盖),但他们都能同时遮盖住没有被设置为置顶的窗口。 root.attributes("-topmost", True)

5.设置成脱离工具栏

 

# True 没有工具栏按钮;False 正常显示 root.overrideredirect(True)

完整代码

https://www.acfun.cn/a/ac29828186
https://www.acfun.cn/a/ac29828247
https://www.jianshu.com/p/f894ebaf85f8
https://www.meipian.cn/3nu7j256?share_depth=1
https://weibo.com/ttarticle/p/show?id=2309404649453419364566
https://itbbs.pconline.com.cn/soft/54640391.html
https://blog.51cto.com/weixincrm/2921792
https://blog.csdn.net/yunkeyi/article/details/118025100
https://xueqiu.com/4824316523/183729007
https://zhuanlan.zhihu.com/p/381849689
http://www.360doc.com/content/21/0618/14/74567251_982605656.shtml
https://www.acfun.cn/a/ac29835220

https://tieba.baidu.com/p/7414885154
https://zhuanlan.zhihu.com/p/382911757
https://www.jianshu.com/p/59326ef4d154
https://www.meipian.cn/3o3uqace?share_depth=1
https://xueqiu.com/4824316523/186727459
https://blog.csdn.net/yunkeyi/article/details/118107516
https://zhinan.sogou.com/guide/d316514420690.htm
https://zhinan.sogou.com/guide/d316514420843.htm
https://zhinan.sogou.com/guide/d316514420844.htm
https://zhinan.sogou.com/guide/d316514420847.htm
https://zhinan.sogou.com/guide/d316514420851.htm
https://blog.51cto.com/weixincrm/2937542
https://itbbs.pconline.com.cn/soft/54641412.html
https://www.acfun.cn/a/ac29919827
https://tieba.baidu.com/p/7416747237
https://weibo.com/ttarticle/p/show?id=2309404650918904987994
https://zhidao.baidu.com/question/504611436407753084.html
https://wenwen.sogou.com/question/q935654637552733384.htm
https://www.xiaohongshu.com/discovery/item/60d1a081000000000102e2a2

# 导入模块,取别名 import tkinter as tk # 实例化一个窗体对象 root = tk.Tk() # 设置窗口的大小长宽为300x300出现的位置距离窗口左上角+150+150 root.geometry("300x300+150+150") # 设置窗口标题 root.title("title") # 设置图标,以OneDrive图标为例,必须是以 .ico 为后缀的图标文件,放于同目录下。 root.iconbitmap("OneDrive.ico") # 设置背景色,可以用英文名,也可以用十六进制表示的颜色。 root["background"] = "#00ffff" # True 全屏;False 正常显示 root.attributes("-fullscreen", True) # True 所有窗口中处于最顶层;False 正常显示 两个同时被置顶的窗口为同级(能互相遮盖),但他们都能同时遮盖住没有被设置为置顶的窗口。 root.attributes("-topmost", True) # True 没有工具栏按钮;False 正常显示 root.overrideredirect(True) # 进入消息循环,显示窗口 root.mainloop()

窗体的方法

1.获取屏幕大小

 

screenheight = root.winfo_screenheight() screenwidth = root.winfo_screenwidth()

完整代码

 

# 导入模块,取别名 import tkinter as tk # 实例化一个窗体对象 root = tk.Tk() # 获取屏幕大小 screenheight = root.winfo_screenheight() screenwidth = root.winfo_screenwidth() print("屏幕高度:", screenheight) print("屏幕宽度:", screenwidth) rootwidth = 300 roothight = 300 # 设置窗口在屏幕居中 root.geometry("%dx%d+%d+%d" % (rootwidth, roothight, (screenwidth-rootwidth)/2, (screenheight-roothight)/2)) # 进入消息循环,显示窗口 root.mainloop()

演示效果

2.获取窗体位置

 

root_x = root.winfo_x() root_y = root.winfo_y()

3.获取窗体大小

 

root_height = root.winfo_height() root_width = root.winfo_width()

完整代码

 

# 导入模块,取别名 import tkinter as tk # 实例化一个窗体对象 root = tk.Tk() # 设置窗体高宽和位置 root.geometry("600x500+150+150") # 更新窗体 root.update() # 获取窗体位置 root_x = root.winfo_x() root_y = root.winfo_y() # 获取窗体大小 root_height = root.winfo_height() root_width = root.winfo_width() # 输出窗体位置和窗体高宽 print(root_x) print(root_y) print(root_width) print(root_y) # 进入消息循环,显示窗口 root.mainloop()

演示效果

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Python tkinter 教程,希望对你有所帮助。 ## 简介 Tkinter 是 Python 的标准 GUI 库之一,使用它可以创建窗口、按钮、文本框、标签等各种 GUI 组件,是 Python 用于图形界面开发的主要工具之一。 ## 安装 Tkinter 是 Python 的标准库,通常情况下无需安装,只需要安装 Python 即可。如果你使用的是 Python 2.x 版本,则需要使用 Tkinter(注意大小写);如果你使用的是 Python 3.x 版本,则需要使用 tkinter(小写)。 ## 示例 下面是一个简单的 Python tkinter 示例,主要包括创建窗口、添加标签和按钮等操作。 ```python import tkinter as tk # 创建窗口 window = tk.Tk() window.title('Hello, World!') window.geometry('300x200') # 添加标签 label = tk.Label(window, text='Hello, World!', font=('Arial', 16)) label.pack() # 添加按钮 button = tk.Button(window, text='Click me!', command=window.quit) button.pack() # 运行窗口 window.mainloop() ``` 上述代码中,我们首先导入了 tkinter 库,并创建了一个名为 window 的窗口设置窗口标题和大小。然后,我们使用 tkinter.Label 类创建了一个名为 label 的标签,并将其添加到窗口中。接着,我们使用 tkinter.Button 类创建了一个名为 button 的按钮,并将其添加到窗口中。最后,我们使用 window.mainloop() 运行了窗口。 ## 组件 下面是一些常用的 tkinter 组件及其用法。 ### 标签 标签用于显示文本或图像,通常用来提供说明或提示信息。 ```python label = tk.Label(window, text='Hello, World!', font=('Arial', 16)) ``` 上述代码中,我们使用 tkinter.Label 类创建了一个名为 label 的标签,并设置了标签的文本和字体大小。 ### 按钮 按钮用于触发事件或执行操作,通常用来提交表单或执行计算等操作。 ```python button = tk.Button(window, text='Click me!', command=window.quit) ``` 上述代码中,我们使用 tkinter.Button 类创建了一个名为 button 的按钮,并设置了按钮的文本和点击事件(退出窗口)。 ### 文本框 文本框用于输入或编辑文本,通常用来接收用户输入或显示大段文本。 ```python text_box = tk.Text(window, height=5, width=30) ``` 上述代码中,我们使用 tkinter.Text 类创建了一个名为 text_box 的文本框,并设置了文本框的高度和宽度。 ### 输入框 输入框用于输入单行文本,通常用来接收用户输入或搜索关键词。 ```python input_box = tk.Entry(window, width=30) ``` 上述代码中,我们使用 tkinter.Entry 类创建了一个名为 input_box 的输入框,并设置了输入框的宽度。 ## 布局 在 tkinter 中,我们可以使用 pack、grid 和 place 等布局管理器来控制组件的位置和大小。 ### pack 布局 pack 布局是最简单的布局管理器,它将组件按照添加的顺序从上到下依次排列。 ```python label.pack() button.pack() ``` 上述代码中,我们使用 pack() 方法将标签和按钮依次排列。 ### grid 布局 grid 布局是一种基于网格的布局管理器,它将组件按照行和列的方式排列。 ```python label.grid(row=0, column=0) button.grid(row=1, column=0) ``` 上述代码中,我们使用 grid() 方法将标签放置在第一行第一列,将按钮放置在第二行第一列。 ### place 布局 place 布局是一种基于绝对坐标的布局管理器,它将组件放置在指定的位置上。 ```python label.place(x=50, y=50) button.place(x=100, y=100) ``` 上述代码中,我们使用 place() 方法将标签放置在 (50, 50) 的位置上,将按钮放置在 (100, 100) 的位置上。 ## 总结 以上就是一个简单的 Python tkinter 教程,涵盖了创建窗口、添加标签和按钮、使用布局管理器等基本操作。希望这篇教程能够帮助你入门 tkinter,更多详细内容可以查看 tkinter 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值