用人话讲计算机:python篇(十七)GUI界面设计:tkinter库 精简版

目录

一、什么是GUI设计

二、用Tkinter库实现

1.设置主窗口

(1)创建窗口

(2)设置标题

(3)设置大小、位置:

(4)设置左上角图标

(5)设置背景

2.标签

(1)创建标签

(2)设置 文本/标签 样式

(3)调整位置

3.按钮

(1)创建按钮

(2)设置样式

(3)调整位置

(4)交互作用

3.输入框

(1)创建输入框

(2)相关应用

(3)相关样式

三、网址分享


一、什么是GUI设计

GUI(Graphical User Interface,图形用户界面)指为软件应用或操作系统创建用户交互界面的过程,重点是通过图形、图像、图标和布局等元素,使得用户能够通过视觉与系统进行互动,而不需要记住复杂的命令或代码。

简单点说,GUI设计,就是设计一个操作界面

这里所说的操作界面,就是类似下图的操作界面:

它有图像、图标、布局等等,你可以通过点击这些,与之进行互动。

总之,能够实现以上内容的就是GUI设计。


而要实现它,我们往往需要库,在python中可以用的库有很多,诸如:

  • Tkinter库:几乎所有的Python安装都自带。它简单易用,适合开发小型桌面应用程序,但对于复杂的界面设计可能不够灵活和强大。

  • PyQt库:广泛用于开发复杂的桌面应用程序,功能强大,支持丰富的控件和高级特性,如自定义控件、绘图、动画等。它适用于需要跨平台支持的项目,尤其在Linux、Windows和macOS上表现良好。

  • wxPython库:与PyQt类似,wxPython也提供本地化的控件和跨平台支持,适用于传统桌面应用的开发。它的界面设计通常更接近操作系统的原生界面。

  • 除此之外当然也有很多,今天下午主讲Tkinter库。

    二、用Tkinter库实现

    开始之前先进行导入库:

    import tkinter         #这是标准导入,但往往为了方便书写常常改名为tk,即下文
    import tkinter as tk        #下文采用此行代码

    1.设置主窗口

    (1)创建窗口

     格式:

    主窗口变量名=tk.Tk()
    主窗口变量名.mainloop()

    解释:

  • tk.Tk是创建窗口的指令。
  • mainloop是让窗口持续出现的指令。(如果没有它,窗口会在打开后立即关闭)
  • 示例:

    (2)设置标题

    格式:

    主窗口变量名.title("标题名字")        #注意,要写在mainloop()之前
    

    实例:

    (3)设置大小、位置:

    格式: 

    主窗口变量名.geometry('宽度x高度+X偏移xY偏移')        #此处x是小写的字母x

    解释:

  • 这里的计算,是以像素为单位的
  • 宽度高度设置的是大小,偏移设置的是位置
  • 如果只设置其中一个,则按默认大小处理
  • 示例:

    (4)设置左上角图标

    格式:

    主窗口变量名.iconbitmap(文件路径)        #记得加r或者改变斜杠,确定路径格式正确

    注意,这里的文件须是 .ico 格式,如果你是png或者jpg等格式,建议去网站转换一下图片格式。

    示例:

    或者,你可以直接使用如下格式:

    图标变量名=PhotoImage(file=r"C:\Users\33134\Desktop\123.png")        #记得替换路径
    主窗口变量名.iconphoto(True, 图标变量名)

    (注:记得提前导入一个新库PhotoImage,即  from tkinter import PhotoImage  ) 

     示例:

    (5)设置背景

    设置为普通纯色

    格式:

    主窗口变量名.configure(bg='blue')        #这里输入颜色英文单词即可
    

    说明:

    除此之外还可以输入颜色的十六进制代码(毕竟你若输入深黄的英文,计算机可识别不了)

    常见如下: 

    设置为图片

    设置为图片会比较麻烦,这里以png图片为例:

    首先载入图片,然后我们可以创建一个画布canvas

    然后将图片载入到画布上,最后将画布覆盖界面即可。 

    import tkinter as tk
    from tkinter import PhotoImage
    
    # 创建主窗口
    a = tk.Tk()
    a.title("python:A.sira")
    a.geometry('400x300')
    
    # 载入图片
    i = PhotoImage(file=r"C:\Users\33134\Desktop\123.png")
    # 创建画布并将图片作为背景
    canvas = tk.Canvas(a, width=i.width(), height=i.height())
    canvas.pack()
    # 在画布上显示图片
    canvas.create_image(0, 0, anchor="nw", image=i)
    
    # 循环窗口
    a.mainloop()
    

    (注:该代码只适合png图片和gif) 

    详细解释:

    canvas = tk.Canvas(a, width=i.width(), height=i.height())

    将画布设置为和图片一样大小

    canvas.pack()

    用于将 canvas (画布)添加到窗口中

    canvas.create_image(0, 0, anchor="nw", image=i)

    (0, 0):这是图片放置的坐标,表示画布的左上角。
    anchor="nw":这是锚点的设置,"nw" 表示锚点在图片的左上角。即,图片的左上角会被放置在 (0, 0) 位置。
    image=i:这是我们要放置的图片对象。


    如果你进行了实际操作就会发现,图片不是很那么合适,这可能是因为:

    比如你的图片大小是1000×1500

    而你的主窗口大小是400×300

    窗口不太能完全承受哦~

    最好的解决办法是修改窗口大小或者图片大小。

    当然也可以修改代码。

    但是代码千千万万,此文可写不清道不完,故而仅举个例。(不过后续我会出专门插入背景的文章的)


    2.标签

    (1)创建标签

    标签就像是一张贴纸,可以将它贴在主窗口上。 

     格式:

    标签变量名=tk.Label()      

    不过,我们常常将其结合使用,来看下面:

    (2)设置 文本/标签 样式

    比如我们,添加文本,必须要先创建一个标签

    你可以将标签理解为一个贴纸,类似在贴纸上写好字,然后贴到黑板上

    格式:

    标签变量名=tk.Label(text="文本")      #创建标签
    标签变量名.pack()        #让贴纸“贴”在黑板上

    这样,你写的“文本”内容就会直接显示在主窗口上了。 

    说明:

    关于Label后面的括号里,还可以设置点别的:

  • bg="字体背景颜色"
  • fg="文本颜色"
  • font=('字体格式',字体大小, '加粗/倾斜')        #加粗写bold,倾斜写italic
  • anchor=“对齐格式”         #如果是多行文本则用justify=“对齐格式”
  • cursor=“鼠标放置在该标签时,显示的样式”
  • 而如果不写某一项,则按默认设置处理

    比如下面的示例中,我们设置为黄色背景,红色字,times字体,大小20,加粗且倾斜

    示例:

     补充1:

    可供选择的字体格式:

    楷体、宋体、仿宋、黑体等一切你电脑安装的字体

    如果你想知道你安装了哪些字体,可调用下面代码:

    import tkinter as tk
    import tkinter.font as tkfont
    
    root = tk.Tk()
    fonts = tkfont.families()
    print(fonts)  # 输出所有可用的字体
    

    可供选择的字体样式:

  • 'normal': 正常样式(默认)
  • 'bold': 粗体
  • 'italic': 斜体
  • 'underline': 下划线
  • 'overstrike': 删除线
  • 你可以组合这些样式来获得不同的效果。样式设置需要使用字符串进行组合,如 'bold italic' 或 'underline'

    可供选择的对齐格式:

    对于单行文本:

  • anchor="n": 上对齐
  • anchor="s": 下对齐
  • anchor="e": 右对齐
  • anchor="w": 左对齐
  • anchor="ne": 右上对齐
  • anchor="nw": 左上对齐
  • anchor="se": 右下对齐
  • anchor="sw": 左下对齐
  • anchor="center": 居中对齐(默认)
  • 对于多行文本:

  • justify="left": 左对齐
  • justify="center": 居中对齐
  • justify="right": 右对齐
  • 可供选择的鼠标样式:

  • arrow: 默认箭头形状
  • circle: 圆形
  • cross: 十字形
  • plus: 加号形状
  •  补充2:

    以下还有些其他可添加的设置:

  • bd: 用来指定 Label 控件的边框宽度,单位为像素,默认为 2 个像素
  • height/width:设置 Lable 的高度/宽度,如果 Lable 显示的是文本,那么单位是文本单元,如果 Label 显示的是图像,那么单位就是像素
  • highlightbackground:当 Label 没有获得焦点的时候高亮边框的颜色
  • highlightcolor:当 Lable 获得焦点的话时候高亮边框的颜色
  • image:指定 Label 显示的图片,一般是 PhotoImage、BitmapImage 的对象
  • relief:指定边框样式,默认值是 "flat",其他参数值有 "groove"、"raised"、"ridge"、"solid"或者"sunken"
  • (3)调整位置

    格式:

    标签变量名.place(x= , y= )         #标签显示在坐标x= y= 上
    

    示例:

     

    3.按钮

    (1)创建按钮

    格式:

    按钮变量名 = tk.Button(text="显示的文本")
    按钮变量名.pack()

    示例:

    tips:这里Button括号里有个a,表示按钮控件应该添加到这个窗口(a)中。

    这样可以防止我们窗口很多时,出现混乱(标签也同理)

    (2)设置样式

    按钮的样式设置同理于标签,汇总如下:

  • anchor: 对齐格式
  • activebackground:当鼠标放在按钮上时候,按妞的背景颜色
  • activeforeground:当鼠标放在按钮上时候,按钮的前景色
  • bd:按钮边框的大小,默认为 2 个像素
  • bg:按钮的背景色
  • fg:文本颜色
  • font:文本字体样式
  • height:按钮的高度
  • highlightcolor:按钮高亮处显示颜色
  • image: 按钮上要显示的图片
  • justify:多行文本时,文本的对齐方式
  • padx/pady:padx 指在文本的左右都添加相同x距离,pady 指在文本的上下都添加相同y距离。
  • state:设置按钮的可用状态,可选参数有normal(可点击)/disabled(不可点击)/active(悬停或点击时激活)
  • text:显示的文本
  • (3)调整位置

    格式原理同标签:

    按钮变量名.place(x= , y= )         #按钮显示在坐标x= y= 上

    (4)交互作用

    按钮之所以不同于标签,是因为按钮具有交互作用,比如点击后,会发生些变化。

    如:输出一段话,弹出图片、新窗口等。

    原理:

    我们可以在Button的括号里,再添加一个command

    即,command = 打开新窗口命令

    这样该按钮就会自动绑定这个命令,每当我们点击这个按钮时,命令执行,弹出新窗口。

    而这个打开新窗口的命令,就是一个函数。

    格式:

    def 按钮调用函数名():
        新窗口变量名 = tk.Toplevel(主窗口变量名)
        其他代码……

    示例:

    之后我们还可以在新窗口添加标签、关闭按钮:

    tips:关闭一个窗口命令,如下所示

            窗口变量名.destroy

    3.输入框

    (1)创建输入框

    格式:

    输入框变量名 = tk.Entry(窗口变量名)        #创建输入框
    输入框变量名.pack()                        #显示输入框

    示例:

    (2)相关应用

    应用示例:输入相关内容后,如果输入内容为正确,则打开新界面

    import tkinter as tk    
    from tkinter import messagebox    #导入库:用来弹出诸如温馨提示的框
    
    # 创建主窗口
    a = tk.Tk()
    a.geometry('300x400')
    
    #输入框创建
    e1 = tk.Entry(a)
    e1.pack()
    
    #创建弹出新窗口的函数
    def open_new_window():
    
        # 创建一个新窗口
        new_window = tk.Toplevel(a)
        new_window.geometry("300x200")
    
        # 在新窗口中添加一个标签
        label = tk.Label(new_window, text="输入内容正确!")
        label.pack()
    
    #验证输入内容的函数
    def validate_input():
    
        # 获取输入框的内容
        input_text = e1.get()
    
        # 设置正确的输入内容(例如“12345”)
        correct_text = "12345"
    
        # 验证输入内容
        if input_text == correct_text:
            open_new_window()  # 输入正确,打开新窗口
        else:
            messagebox.showerror("错误", "输入内容不正确!")  # 输入错误,弹出提示
    
    #创建验证按钮
    button= tk.Button(a, text="验证输入", command=validate_input)
    button.pack(pady=10)
    
    # 循环窗口
    a.mainloop()
    
    

    Tips:这里用到的库messagebox

    它是用来弹出错误提示框的,这样可以省去我们手动创建新框的时间

    (3)相关样式

    我们可以在tk.Entry(窗口变量名, ……) 的括号里添加,原理和标签、按钮差不多

  • width:设置文本框的宽度,以字符数为单位
  • font:设置文本框中文字的字体和大小
  • bg:设置文本框的背景色
  • fg:设置文本框中文字的颜色
  • show:隐藏文本框中的字符(通常用于密码输入),如 show= "*"
  • state:"normal":正常输入、"disabled":无法修改文本框内容、"readonly":只读模式
  • insertbackground:设置插入符(光标)的颜色。如,insertbackground="green"
  • relief:设置文本框的边框样式。包括 "flat""raised""sunken""solid" 等
  • justify:多行文本对齐格式
  • ……
  • 三、网址分享

    以上就是关于  GUI界面设计:tkinter库  的全部内容了

    不过这并不是tkinter库的极限,如果大家想进一步了解它的详细功能,我可以给大家分享一个学习网址,稍后我会放在评论区当中~~

    作者:A.sir啊

    物联沃分享整理
    物联沃-IOTWORD物联网 » 用人话讲计算机:python篇(十七)GUI界面设计:tkinter库 精简版

    发表回复