龙空技术网

逃学博士出品 - 为python插上翅膀,可视化接口工具tkinter的详解

逃学博士 2286

前言:

现时咱们对“python的tkinter模块”大体比较注重,各位老铁们都需要了解一些“python的tkinter模块”的相关知识。那么小编在网络上收集了一些对于“python的tkinter模块””的相关文章,希望朋友们能喜欢,兄弟们一起来学习一下吧!

基本概念

GUI - Graphical User Interface. 中文叫图形用户接口。图像用户接口可以看做为人与计算机之间的沟通媒介。

如果想为自己写的程序做一个易于操作的界面,那么,tkinter应该是最容易上手的图形接口开发工具。

tkinter 是python自带的模块,在安装python的同时,tkinter模块就已经在系统里了。只需import导入,即可使用。tkinter模块并没有网上说的那么差,只是官方编写的tkinter的文档很差劲。之后的一段时间,我会将tkinter模块的使用做一个详细的介绍。

导入tkinter模块

from tkinter import * 或者是 import tkinter as tk

这是两种最常见的导入写法。

from X import * 和 import X 的区别

在导入python 模块的时候,很多时候我们都面临上述两种导入的选择。下面我将说明这两种方法的区别。

import X

import X 意味着创建了一个模块 X的引用。假设模块X里有一个函数方法 func(),如果想调用func,就需要使用完整的路径,例如 X.func();

from X import *

from X import * 意味着对模块X里的所有对象创建了引用。此时,如果想调用func,只需要使用func()即可。同时,由于你并没有创建X的引用,你将无法通过X.func()调用func方法。

举个例子,模块X相当于姓氏,模块X里的对象相当于名。如果一个班两个 ’天天‘,一个叫陶天天,一个叫欧天天。那么,老师就需要加上姓去区分两个’天天‘。但是,如果班里只有一个孩子叫’天天‘,就只需要喊’天天‘就好。

导入tkinter模块之后,可以使用TkVersion去查看tkinter模块的版本。

import tkinter as tkprint(tk.TkVersion)Out[2]: 8.6
创建窗口

tkinter中的Tk() 方法可以创建一个根窗口,之后添加的控件将会被放进这个创建的窗口里。

import tkinter as tkwindow = tk.Tk()window.mainloop()

创建的窗口,取名window

window.mainloop() 会启动创建的window GUI。

窗口建立好,就需要进行一些相关的设置。比如窗口标题,图标,大小,底色等等。

添加图标

默认的图标是一片树叶,如上图左上角。自己建的窗口,自然想换上漂亮、大气的图标。tkinter提供了iconbitmap 方法来更换图标。如果想使用下图作为图标,我们只需要如下设置。

图标

import tkinter as tkwindow = tk.Tk()window.iconbitmap('palm-tree-icon.ico')window.mainloop()

'palm-tree-icon.ico' 是图标存储的路径,如果图标在程序所在的文件夹里,可以直接调用。不然就得使用完整的路径。

图标更改后的窗口

设置标题

默认的窗口标题是左上角的tk,通过title()可以设置窗口的标题。

import tkinter as tkwindow = tk.Tk()window.title('逃学联盟')window.iconbitmap('palm-tree-icon.ico')window.mainloop()

标题更改后的窗口

设置背景颜色

使用configure()设置背景颜色,window.configure(bg='#008CBA')

import tkinter as tkwindow = tk.Tk()window.title('逃学联盟')window.configure(bg='#008CBA')window.iconbitmap('palm-tree-icon.ico')window.mainloop()

背景色设置后的窗口

设置窗口大小和屏幕的相对位置

geometry()可以用来设置初始窗口的大小以及窗口于屏幕的相对位置。注意,代码中的x不是乘法,是字母xy的x。具体方法如下:

.geometry("窗口宽 x 窗口高 + 屏幕左边框相对距离 + 屏幕上边框相对距离")。

import tkinter as tkwindow = tk.Tk()window.title('逃学联盟')window.configure(bg='#008CBA')window.geometry("500x100+300+300")window.iconbitmap('palm-tree-icon.ico')window.mainloop()

上述代码创建了一个500 * 100 px大小的窗口,窗口左上角坐标是(300,300)。

图片来源网络

如果需要将窗口放在屏幕的正中,可以通过一些简单的计算和geometry()方法。

通过.winfo_screenwidth() 和 .winfo_screenheight() 方法可以得到屏幕的宽和高。如果我们需要将窗口放在屏幕正中,窗口的左边框距离屏幕的左边框为 (屏幕宽 - 窗口宽)/ 2。

import tkinter as tkwindow = tk.Tk()window.title('逃学联盟')window.configure(bg='#008CBA')window_width = 500window_height = 100screen_width = window.winfo_screenwidth()screen_height = window.winfo_screenheight()x = int((screen_width - window_width)/2)y = int((screen_height - window_height)/2)window.geometry(f"{window_width}x{window_height}+{x}+{y}")window.iconbitmap('palm-tree-icon.ico')window.mainloop()
设置窗口的最小的宽高,最大的宽高,全屏显示和窗口是否可以拖拽大小

.resizable(True, True)方法设置窗口的宽和长是否可以拖拽调整大小;

.minsize(宽, 高)方法设置窗口的最小宽高;

.maxsize(宽, 高)方法设置窗口的最大宽高;

.state('zoomed')方法设置窗口全屏显示

.maxsize(宽, 高)方法 和 .state('zoomed')方法不要同时使用。

import tkinter as tkwindow = tk.Tk()window.title('逃学联盟')window.configure(bg='#008CBA')window.resizable(True, True)window.minsize(100, 100)# window.maxsize(1000, 500)window.state('zoomed')window_width = 500window_height = 100screen_width = window.winfo_screenwidth()screen_height = window.winfo_screenheight()x = int((screen_width - window_width)/2)y = int((screen_height - window_height)/2)window.geometry(f"{window_width}x{window_height}+{x}+{y}")window.iconbitmap('palm-tree-icon.ico')window.mainloop()
实例1

鉴于还没有开始其他的tkinter组件,第一个实例借助after方法实现窗口背景色的更换还有窗口的关闭。

after(delay_ms, callback=None, *args)

after()方法会每隔delay_ms (毫秒)调用callback的函数。

window.destroy()方法会关闭window窗口。

import tkinter as tkimport randomwindow = tk.Tk()window.title('逃学联盟')window.configure(bg='#008CBA')window.resizable(True, True)window.minsize(100, 100)# window.maxsize(1000, 500)window.state('zoomed')window_width = 500window_height = 100screen_width = window.winfo_screenwidth()screen_height = window.winfo_screenheight()x = int((screen_width - window_width)/2)y = int((screen_height - window_height)/2)window.geometry(f"{window_width}x{window_height}+{x}+{y}")window.iconbitmap('palm-tree-icon.ico')bg_color_list = ['#008CBA', '#FFA500', '#4CAF50', '#f44336']def adjust_bg_color():     if bg_color_list:          rand = random.choice(bg_color_list)          window.configure(bg=rand)          window.after(2000, adjust_bg_color)          bg_color_list.remove(rand)     else:          window.destroy()window.after(0, adjust_bg_color)window.mainloop()
定义一个列表 bg_color_list 含有四种不同的颜色代号;定义callback函数 adjust_bg_color, 如果adjust_bg_color里有值,则随机挑选一个颜色,并更改窗口的bg属性;每隔2000毫秒调用一次adjust_bg_color;列表 bg_color_list 中移除被选中的颜色代号;如果列表 bg_color_list 为空,则关闭窗口;

感兴趣的同学可以自行运行例子,后面会逐一介绍tkinter的组件。谢谢大家!

标签: #python的tkinter模块