python+tkinter可视化GUI方式

 更新时间:2026年04月13日 10:13:55   作者:吾名招财  
文章介绍了使用Python的tkinter库创建GUI窗口的过程,包括窗口和标签的定义、Entry和Text控件的基本属性和使用方法、网格布局的应用、按钮绑定事件和弹窗的使用、Combox下拉框的添加、控件属性值的获取和更改,以及tkinter自带的剪切板操作

1.创建窗口

import tkinter as tk    #导入tk
if __name__ == '__main__':
    root = tk.Tk()                   #root代表一个窗口,每调用一次函数就会新生成一个窗口
    root.mainloop()                  #无限循环,不断更新页面

2.窗口的定义和label的使用

一般的编写方式如何

一般会声明一个类

3.Label、Entry、Text的基本属性和使用

标签、编辑框、文本框

(1)标签

标签的基本参数如下

(2)编辑框

(3)文本框

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招财进宝
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #导入tk
from tkinter import *     #在下方进行使用tk.Label()等方法时,可直接Label()

class Application(tk.Frame):
    #类的初始化函数
    def __init__(self,root):        #传入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必须调用,用于将控件添加到窗口中,否则控件不显示
        self.envar = tk.StringVar(None, '123')

        self.intwind()              #调用窗口函数

    #创建窗口控件
    def intwind(self):
        #以下的每个控件都要pack
        Label(self,text='123',fg='red',bg='green',width=50).pack()       #传入文本123,文字颜色红色,背景绿色,所占50个字的宽度
        Entry(self,textvariable=self.envar,fg='#888',bg='#ff0',width=10).pack()     #编辑框

        text = Text(self,fg='#ff0',bg='#000',width=20)                       #初始化一个文本控件对象
        text.pack()                             #在此处pack,pack后返回的值是none
        text.insert('end','111')                #在末尾插入文字123
        text.insert('end', '222')
        text.insert('1.4', '555')               #在第1行第4列插入数字
        text.insert('1.8', '333')               #此处指定位置插入成功
        text.insert('2.1', '444')              #当输入2.X或者0.X时,都是插入最后面,原因可能是只有一行,无换行
        text.insert('1.13', '666')


if __name__ == '__main__':
    root = tk.Tk()                   #root代表一个窗口,每调用一次函数就会新生成一个窗口
    application = Application(root)         #初始化一个对象,传入窗口root
    root.mainloop()                  #无限循环,不断更新页面

4.网格布局讲解

前面的排版都是以数列进行排版的,即一行一行的排版

这里使用grid函数,而不是使用pack函数了。

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招财进宝
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #导入tk
from tkinter import *     #在下方进行使用tk.Label()等方法时,可直接Label()

class Application(tk.Frame):
    #类的初始化函数
    def __init__(self,root):        #传入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必须调用,用于将控件添加到窗口中,否则控件不显示
        self.envar = tk.StringVar(None, '123')

        self.intwind()              #调用窗口函数

    #创建窗口控件
    def intwind(self):
        #以下的每个控件都要pack
        Label(self,text='123',fg='red',bg='green',width=2).grid(row=0,column=0)       #传入文本123,文字颜色红色,背景绿色,所占50个字的宽度
        Entry(self,textvariable=self.envar,fg='#888',bg='#ff0',width=10).grid(row=0,column=1)     #编辑框

        text = Text(self,fg='#ff0',bg='#000',width=20)                       #初始化一个文本控件对象
        #text.grid(columnspan=2,rowspan=2,pady=20,padx=50)               #合并两列,可达到居中的效果
        text.grid(columnspan=2, rowspan=2, ipadx=50)                        #ipadx会向外扩展,而padx会向里缩
        text.insert('end','111')                #在末尾插入文字123
        text.insert('end', '222')
        text.insert('1.4', '555')               #在第1行第4列插入数字
        text.insert('1.8', '333')               #此处指定位置插入成功
        text.insert('2.1', '444')              #当输入2.X或者0.X时,都是插入最后面,原因可能是只有一行,无换行
        text.insert('1.13', '666')


if __name__ == '__main__':
    root = tk.Tk()                   #root代表一个窗口,每调用一次函数就会新生成一个窗口
    application = Application(root)         #初始化一个对象,传入窗口root
    root.mainloop()                  #无限循环,不断更新页面

5.丰富窗口编写一个简单的窗口

编写一个类似下方框架的窗口

发现有两个横向组成,此时使用frame进行框架的布局,若直接单个控件的添加,不太好管理

6.创建按钮绑定事件和弹窗的使用

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招财进宝
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #导入tk
from tkinter import *     #在下方进行使用tk.Label()等方法时,可直接Label()
from tkinter import messagebox      #此处引入messagebox,尽管之前引入*全部了但找不到

class Application(tk.Frame):
    #类的初始化函数
    def __init__(self,root):        #传入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必须调用,用于将控件添加到窗口中,否则控件不显示
        self.envar = tk.StringVar(None, '123')          #用于编辑框的文本信息输入
        #root.geometry('250x145')                        #设置窗口的大小
        root.minsize(250,145)                           #设置窗口的最小值
        root.maxsize(250, 145)                          #设置窗口的最大值
        root.title('登录')                            #设置窗口的名称
        #root.iconbitmap()                             #设置图标,必须是ico格式的
        self.username = tk.StringVar()  # 用于编辑框的文本信息输入,此处注意在前方要引入from tkinter import messagebox
        self.password = tk.StringVar()  # 用于编辑框的文本信息输入

        self.intwind()              #调用窗口函数

    def buttonActive(self):
        u = self.username.get()             #得到编辑框中的内容
        p = self.password.get()
        if len(u)==0 or len(p)==0:
            messagebox.showinfo('提示:','请完整信息')
            return
        messagebox.showinfo('提示:', '你输入的账号:%s\n密码:%s'%(u,p))

    #创建窗口控件
    def intwind(self):
        frame1 = Frame(self)
        Label(frame1,text='账号:').grid(row=0,column=0)
        Entry(frame1,textvariable=self.username).grid(row=0,column=1)

        frame2 = Frame(self)
        Label(frame2, text='密码:').grid(row=0, column=0)
        Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示编辑框输入的东西都会显示*

        frame1.grid(pady=15)
        frame2.grid()

        Button(self,text='登录',width=12,command=self.buttonActive).grid(pady=10)
        
if __name__ == '__main__':
    root = tk.Tk()                   #root代表一个窗口,每调用一次函数就会新生成一个窗口
    application = Application(root)         #初始化一个对象,传入窗口root
    root.mainloop()                  #无限循环,不断更新页面

7.下拉框Combox的使用

添加下拉框可以选择是管理员还是普通成员的登录方式

但是上方并没有进行默认选择

8.获取或更改控件的属性值

#创建窗口控件
def intwind(self):
    frame1 = Frame(self)
    Label(frame1,text='账号:').grid(row=0,column=0)
    Entry(frame1,textvariable=self.username).grid(row=0,column=1)

    frame2 = Frame(self)
    Label(frame2, text='密码:').grid(row=0, column=0)
    Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示编辑框输入的东西都会显示*

    frame3 = Frame(self)
    Label(frame3, text='身份:').grid(row=0, column=0)
    self.selector = ttk.Combobox(frame3,values=('普通成员','管理员'),width=18) #引入from tkinter import ttk
    self.selector.grid(row=0, column=1)
    self.selector.current(0)
    self.selector.bind('<<ComboboxSelected>>',self.selectorLinstener)      #绑定一个监听事件/函数,用来监听选择的

    frame3.grid(pady=6)                 #将身份的模块放到最开始显示
    frame1.grid(pady=10)
    frame2.grid()

    btn = Button(self,text='登录',width=12,command=self.buttonActive)
    btn.grid(pady=10)

    # 此处获取控件的属性的方法(cget()),所有控件都支持
    print(self.selector.cget('values'))             #获取下拉框的属性values
    print(self.selector.cget('width'))              #获取下拉框的属性width

    #使用config获取属性或者更改属性
    # self.selector.config(values=[1,2])      #重新配置属性values的值
    # self.selector.current(0)                #设置选择的当前值
    
    #使用字典键值对的方式获取属性值,或者更改属性值
    self.selector['values']=[1,2]             #此处的属性的设置相当于上面的

    print(btn['text'])                  #获取上一个按钮控件的属性值,打印
    btn['text']='123'                   #对按钮控件的属性值更改

返回的是字典,可以以字典的方式将值打印。

#创建窗口控件
def intwind(self):
    frame1 = Frame(self)
    Label(frame1,text='账号:').grid(row=0,column=0)
    Entry(frame1,textvariable=self.username).grid(row=0,column=1)

    frame2 = Frame(self)
    Label(frame2, text='密码:').grid(row=0, column=0)
    Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示编辑框输入的东西都会显示*

    frame3 = Frame(self)
    Label(frame3, text='身份:').grid(row=0, column=0)
    self.selector = ttk.Combobox(frame3,values=('普通成员','管理员'),width=18) #引入from tkinter import ttk
    self.selector.grid(row=0, column=1)
    self.selector.current(0)
    self.selector.bind('<<ComboboxSelected>>',self.selectorLinstener)      #绑定一个监听事件/函数,用来监听选择的

    frame3.grid(pady=6)                 #将身份的模块放到最开始显示
    frame1.grid(pady=10)
    frame2.grid()

    btn = Button(self,text='登录',width=12,command=self.buttonActive)
    btn.grid(pady=10)

    # btn.grid_forget()                   #是控件不显示
    # btn.grid()                          #重新显示,需设置pady等

    btn.grid_remove()                   #同样隐藏控件
    btn.grid()                          #重新显示,设置的pady等参数已经保留

    btn.grid_propagate(0)               #0强制控件不变形(当放大缩小时)

    #self.grid_slaves(0,0)获取当前元素的子控件的第几行第几列的控件
    print(self.grid_slaves(0,0))        #获取第0行0列的frame3的控件
    print(self.grid_slaves(0, 1))        #没有第1列的frame,只有第0列的frame,故为空
    print(self.grid_slaves(1, 0))        #获取第1行0列的frame的控件

    # print(self.selector.grid_info())  # 获取selector控件的grid的属性
    # print(btn.grid_info())  # 获取btn控件的grid的属性

    # 此处获取控件的属性的方法(cget()),所有控件都支持
    print(self.selector.cget('values'))             #获取下拉框的属性values
    print(self.selector.cget('width'))              #获取下拉框的属性width

    #使用config获取属性或者更改属性
    # self.selector.config(values=[1,2])      #重新配置属性values的值
    # self.selector.current(0)                #设置选择的当前值

    #使用字典键值对的方式获取属性值,或者更改属性值
    self.selector['values']=[1,2]             #此处的属性的设置相当于上面的
    print(btn['text'])                  #获取上一个按钮控件的属性值,打印
   # btn['text']='123'                   #对按钮控件的属性值更改

9.tkinter自带剪切板操作

一个是添加剪切板,一个是清空剪切板,调用两个函数即可

虽然Python中有个库也可以实现此操作,但使用tkinter的自带函数即可

self.clipboard_append('123')        #在剪切板放入数字123,可以CTR+V
print(self.clipboard_get())         #获取剪切板的内容并打印
self.clipboard_clear()              #清空剪切板内容,再CTR+V就显示不出了

10.所有的代码

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/28 9:43
#@Author : 招财进宝
#@File : _int_.py
#@Software: PyCharm

import tkinter as tk    #导入tk
from tkinter import *     #在下方进行使用tk.Label()等方法时,可直接Label()
from tkinter import messagebox      #此处引入messagebox,尽管之前引入*全部了但找不到
from tkinter import ttk

class Application(tk.Frame):
    #类的初始化函数
    def __init__(self,root):        #传入root窗口
        super().__init__(root)
        self.master = root
        self.pack()                 #pack必须调用,用于将控件添加到窗口中,否则控件不显示
        self.envar = tk.StringVar(None, '123')          #用于编辑框的文本信息输入
        #root.geometry('250x145')                        #设置窗口的大小
        root.minsize(250,145)                           #设置窗口的最小值
        root.maxsize(250, 145)                          #设置窗口的最大值
        root.title('登录')                            #设置窗口的名称
        #root.iconbitmap()                             #设置图标,必须是ico格式的
        self.username = tk.StringVar()  # 用于编辑框的文本信息输入,此处注意在前方要引入from tkinter import messagebox
        self.password = tk.StringVar()  # 用于编辑框的文本信息输入
        self.select = tk.StringVar(None,'普通成员')     #设置默认数据为普通成员

        self.intwind()              #调用窗口函数

    def buttonActive(self):
        u = self.username.get()             #得到编辑框中的内容
        p = self.password.get()
        if len(u)==0 or len(p)==0:
            messagebox.showinfo('提示:','请完整信息')
            return
        messagebox.showinfo('提示:', '你输入的账号:%s\n密码:%s\n你的登录身份是:%s'%(u,p,self.select.get()))

    def selectorLinstener(self,*args):
        print(self.selector.get())
        self.select.set(self.selector.get())

    #创建窗口控件
    def intwind(self):
        frame1 = Frame(self)
        Label(frame1,text='账号:').grid(row=0,column=0)
        Entry(frame1,textvariable=self.username).grid(row=0,column=1)

        frame2 = Frame(self)
        Label(frame2, text='密码:').grid(row=0, column=0)
        Entry(frame2, show='*',textvariable=self.password).grid(row=0, column=1)  #show='*',表示编辑框输入的东西都会显示*

        frame3 = Frame(self)
        Label(frame3, text='身份:').grid(row=0, column=0)
        self.selector = ttk.Combobox(frame3,values=('普通成员','管理员'),width=18) #引入from tkinter import ttk
        self.selector.grid(row=0, column=1)
        self.selector.current(0)
        self.selector.bind('<<ComboboxSelected>>',self.selectorLinstener)      #绑定一个监听事件/函数,用来监听选择的

        frame3.grid(pady=6)                 #将身份的模块放到最开始显示
        frame1.grid(pady=10)
        frame2.grid()

        btn = Button(self,text='登录',width=12,command=self.buttonActive)
        btn.grid(pady=10)

        # btn.grid_forget()                   #是控件不显示
        # btn.grid()                          #重新显示,需设置pady等

        btn.grid_remove()                   #同样隐藏控件
        btn.grid()                          #重新显示,设置的pady等参数已经保留

        btn.grid_propagate(0)               #0强制控件不变形(当放大缩小时)

        #self.grid_slaves(0,0)获取当前元素的子控件的第几行第几列的控件
        print(self.grid_slaves(0,0))        #获取第0行0列的frame3的控件
        print(self.grid_slaves(0, 1))        #没有第1列的frame,只有第0列的frame,故为空
        print(self.grid_slaves(1, 0))        #获取第1行0列的frame的控件

        # print(self.selector.grid_info())  # 获取selector控件的grid的属性
        # print(btn.grid_info())  # 获取btn控件的grid的属性

        # 此处获取控件的属性的方法(cget()),所有控件都支持
        print(self.selector.cget('values'))             #获取下拉框的属性values
        print(self.selector.cget('width'))              #获取下拉框的属性width

        #使用config获取属性或者更改属性
        # self.selector.config(values=[1,2])      #重新配置属性values的值
        # self.selector.current(0)                #设置选择的当前值

        #使用字典键值对的方式获取属性值,或者更改属性值
        self.selector['values']=[1,2]             #此处的属性的设置相当于上面的
        print(btn['text'])                  #获取上一个按钮控件的属性值,打印
       # btn['text']='123'                   #对按钮控件的属性值更改

        self.clipboard_append('123')        #在剪切板放入数字123,可以CTR+V
        print(self.clipboard_get())         #获取剪切板的内容并打印
        self.clipboard_clear()              #清空剪切板内容,再CTR+V就显示不出了


if __name__ == '__main__':
    root = tk.Tk()                   #root代表一个窗口,每调用一次函数就会新生成一个窗口
    application = Application(root)         #初始化一个对象,传入窗口root
    root.mainloop()                  #无限循环,不断更新页面

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现数据可视化案例分析

    Python实现数据可视化案例分析

    这篇文章主要介绍了Python实现数据可视化案例分析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • 使用Python制作缩放自如的圣诞老人(圣诞树)

    使用Python制作缩放自如的圣诞老人(圣诞树)

    这篇文章主要介绍了使用Python做一个缩放自如的圣诞老人,这种动图制作方法不仅限于圣诞老人,任何图片理论上都是可以的。比如说,我们还可以做一棵不断长大的圣诞树!具体实例代码跟随小编一起看看吧
    2019-12-12
  • python每5分钟从kafka中提取数据的例子

    python每5分钟从kafka中提取数据的例子

    今天小编就为大家分享一篇python每5分钟从kafka中提取数据的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python实现遍历读取文件或文件夹

    Python实现遍历读取文件或文件夹

    搞机器学习或者深度学习算法很多时候需要遍历某个目录读取文件,特别是经常需要读取某个特定后缀的文件。本文为大家准备了Python遍历读取文件或文件夹的示例代码,需要的可以参考一下
    2022-08-08
  • Python中NumPy的数组拆分

    Python中NumPy的数组拆分

    这篇文章主要介绍了Python中NumPy的数组拆分,我们使用array_split()分割数组,将要分割的数组和分割数传递给它,如果将一个数组拆分为 3 个数组,则可以像使用任何数组元素一样从结果中访问它们,需要的朋友可以参考下
    2023-07-07
  • 用Python编写简单的gRPC服务的详细过程

    用Python编写简单的gRPC服务的详细过程

    gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。接下来通过本文给大家介绍用Python编写简单的gRPC服务的详细过程,感兴趣的朋友一起看看吧
    2021-07-07
  • selenium3+python3环境搭建教程图解

    selenium3+python3环境搭建教程图解

    这篇文章主要介绍了selenium3+python3环境搭建教程图解,需要的朋友可以参考下
    2018-12-12
  • python文件处理fileinput使用方法详解

    python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python利用zhdate模块实现农历日期处理

    Python利用zhdate模块实现农历日期处理

    zhdate模块统计从1900年到2100年的农历月份数据代码,支持农历和公历之间的转化,并且支持日期差额运算。本文将利用这一模块实现农历日期的处理,需要的可以参考一下
    2022-03-03
  • python如何代码集体右移

    python如何代码集体右移

    在本篇文章里小编给各位分享的是一篇关于python如何代码集体右移的相关知识点文章,需要的朋友们可以学习下。
    2020-07-07

最新评论