python+tkinter可视化GUI

  • 1.创建窗口
  • 2.窗口的定义和label的使用
  • 3.Label、Entry、Text的基本属性和使用
  • (1)标签
  • (2)编辑框
  • (3)文本框
  • 4.网格布局讲解
  • 5.丰富窗口编写一个简单的窗口
  • 6.创建按钮绑定事件和弹窗的使用
  • 7.下拉框Combox的使用
  • 8.获取或更改控件的属性值
  • 9.tkinter自带剪切板操作
  • 10.所有的代码


1.创建窗口

python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框

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

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

一般的编写方式如何

一般会声明一个类

python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_02

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

标签、编辑框、文本框

(1)标签

标签的基本参数如下

python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_03


python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_04

(2)编辑框

python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_05


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_06


python tkinter可视化背景的修改 pycharm tkinter可视化_控件_07


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_08

(3)文本框

python tkinter可视化背景的修改 pycharm tkinter可视化_python_09


python tkinter可视化背景的修改 pycharm tkinter可视化_python_10


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_11


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_12


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_13

#-*- 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函数了。

python tkinter可视化背景的修改 pycharm tkinter可视化_控件_14


python tkinter可视化背景的修改 pycharm tkinter可视化_控件_15


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_16


python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_17

#-*- 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.丰富窗口编写一个简单的窗口

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

python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_18


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

python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_19


python tkinter可视化背景的修改 pycharm tkinter可视化_控件_20


python tkinter可视化背景的修改 pycharm tkinter可视化_控件_21


python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_22

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

python tkinter可视化背景的修改 pycharm tkinter可视化_python_23


python tkinter可视化背景的修改 pycharm tkinter可视化_python_24


python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_25


python tkinter可视化背景的修改 pycharm tkinter可视化_python_26

#-*- 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的使用

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

python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_27


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

python tkinter可视化背景的修改 pycharm tkinter可视化_控件_28


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_29


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_30

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

python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_31


python tkinter可视化背景的修改 pycharm tkinter可视化_控件_32


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_33


python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_34

#创建窗口控件
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'                   #对按钮控件的属性值更改

python tkinter可视化背景的修改 pycharm tkinter可视化_控件_35


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

python tkinter可视化背景的修改 pycharm tkinter可视化_控件_36


python tkinter可视化背景的修改 pycharm tkinter可视化_编辑框_37


python tkinter可视化背景的修改 pycharm tkinter可视化_控件_38


python tkinter可视化背景的修改 pycharm tkinter可视化_属性值_39


python tkinter可视化背景的修改 pycharm tkinter可视化_python_40

#创建窗口控件
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的自带函数即可

python tkinter可视化背景的修改 pycharm tkinter可视化_控件_41


python tkinter可视化背景的修改 pycharm tkinter可视化_控件_42

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()                  #无限循环,不断更新页面