Python的GUI界面

一、按钮(Button)和标签(Label)

出现一个界面,点击一下按钮,标签上的东西会变成“you hit me”,再按一下,则会变回原样

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x100')  # 长和宽

var = tk.StringVar()  # tk里面的字符串变量

l = tk.Label(window, textvariable=var,  # 在window上面的Label, text是文字, textvariable是文字变量
             bg='green', font=('Arial', 12), width=15,  # 背景颜色, 字体及大小,
             height=2)  # 长和宽

l.pack()  # 是一种安置方式
# l.place() : 也是一种安置方式

on_hit = False  # 先设置没有点击


def hit_me():  # 点击函数
    global on_hit  # 全局变量
    if not on_hit:
        on_hit = True
        var.set('you hit me')  # 修改字符串变量
    else:
        on_hit = False
        var.set(" ")


b = tk.Button(window, text='hit me', width=15, height=1, command=hit_me)  # command是执行的功能

b.pack()  # 一种安置方式

window.mainloop()  # 可视化, 不断刷新

Python的GUI界面_第1张图片
Python的GUI界面_第2张图片
Python的GUI界面_第3张图片

二、输入框Entey和文本域Text

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

e = tk.Entry(window, show='*')  # show表示输入的东西显示为*, 这是一个输入框
e.pack()  # 放置位置


def insert_point():
    var = e.get()  # 得到输入框的内容
    t.insert('insert', var)  # insert表示插入光标所在地


def insert_end():
    var = e.get()
    t.insert('end', var)  # end表示表示插入到末尾,这里也可以写插入要几行几列
    					  # 1.1表示第一行第一列


b1 = tk.Button(window, text='insert point', width=15, height=1, command=insert_point)  # command是执行的功能
b1.pack()  # 一种安置方式

b2 = tk.Button(window, text='insert end', command=insert_end)
b2.pack()

t = tk.Text(window, height=2)  # 一个文本框,高度为两个字的高度
t.pack()

window.mainloop()  # 可视化, 不断刷新

三、列表框及标签的学习

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

var1 = tk.StringVar()  # 一个字符变量
l = tk.Label(window, bg='yellow', width=4, textvariable=var1)  # l是一个标签
l.pack()


def print_label():  # 一个将光标所在行的内容放到标签上的函数
    value = lb.get(lb.curselection())  # 拿出来光标所选定的东西
    var1.set(value)  # 设置var1的内容


b1 = tk.Button(window, bg='green', text='print selection', width=15, height=1, command=print_label)  # command是执行的功能
b1.pack()  # 一种安置方式

var2 = tk.StringVar()
var2.set((11, 22, 33, 44))
lb = tk.Listbox(window, listvariable=var2, width=26, bg='cyan')  # 是一个列表框,listvariable就是那个列表
list_items = [1, 2, 3, 4]
for item in list_items:
    lb.insert('end', item)  # 将list_items里面的值插入到列表框尾部
lb.insert(1, 'first')  # 在第一位上插入first
lb.insert(2, 'second')
lb.delete(2)  # 删除第二位的元素
lb.pack()

window.mainloop()  # 可视化, 不断刷新

Python的GUI界面_第4张图片

四、选择框与标签的学习

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

var = tk.StringVar()  # 一个字符变量
l = tk.Label(window, bg='yellow', width=20, text='empty')  # l是一个标签
l.pack()


def print_selection():
    l.config(text='you have selected' + var.get())  # config是修改参数的函数


# 三个选择按钮
r1 = tk.Radiobutton(window, text='Option A', variable=var, value='A', command=print_selection)  # 当你选择该选项时, var就会被赋值为A
r1.pack()
r2 = tk.Radiobutton(window, text='Option B', variable=var, value='B', command=print_selection)  # 当你选择该选项时, var就会被赋值为B
r2.pack()
r3 = tk.Radiobutton(window, text='Option C', variable=var, value='C', command=print_selection)  # 当你选择该选项时, var就会被赋值为C
r3.pack()


window.mainloop()

Python的GUI界面_第5张图片

五、Scale尺度的学习

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

l = tk.Label(window, bg='yellow', width=20, text='empty')  # l是一个标签
l.pack()


def print_selection(text):
    l.config(text='you have selected' + text)  # text是默认传入的参数, 是scale尺度的值


s = tk.Scale(window, label='try me', from_=5, to=11, orient=tk.HORIZONTAL,  # from_ ,to : 从多少到多少的尺度, orient:选择是水平方向还是垂直方向, length是200像素的长度
             length=200, showvalue=0, tickinterval=3, resolution=0.01, command=print_selection) # command表示执行的函数
s.pack()                # showvalue 表示是否显示出来当前选择的尺度,0为不显示,1为显示 tickinterval表示隔几个数为一个刻度 , resolution表示显示的精度

window.mainloop()

Python的GUI界面_第6张图片

六、多选框CheckButton的应用

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

l = tk.Label(window, bg='yellow', width=20, text='empty')  # l是一个标签
l.pack()


def print_selection():
    if (var1.get() == 1) & (var2.get()) == 0:
        l.config(text='I only love Python')
    elif (var1.get() == 0) & (var2.get() == 1):
        l.config(text='I only love C++')
    elif (var1.get() == 0) & (var2.get() == 0):
        l.config(text='I do not love either')
    else:
        l.config(text='I love both')


var1 = tk.IntVar()  # 整数形式的变量
var2 = tk.IntVar()
c1 = tk.Checkbutton(window, text='Python', variable=var1, onvalue=1, offvalue=0,  # 选这个选择var1被赋值为1, 不选被赋值为0
                    command=print_selection)
c2 = tk.Checkbutton(window, text='C++', variable=var2, onvalue=1, offvalue=0,
                    command=print_selection)
c1.pack()
c2.pack()

window.mainloop()

Python的GUI界面_第7张图片

七、Menubar菜单

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

l = tk.Label(window, text='', bg='yellow')
l.pack()

count = 0


def do_job():
    global count
    l.config(text='do' + str(count))
    count += 1


menubar = tk.Menu(window)  # 一个菜单栏
filemenu = tk.Menu(menubar, tearoff=0)  # tearoff为1会增加一条分割线   这里理解为这两句(和下面一句)同时控制, 才把filemenu放到了menubar上
menubar.add_cascade(label='file', menu=filemenu)  # 在munubar上面加上我所定义的filemenu, 起名为file
filemenu.add_command(label='New', command=do_job)  # 在file中加入可选的选项, 功能
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)  # 都执行同样的功能
filemenu.add_separator()  # 加一条分割线
filemenu.add_command(label='Exit', command=window.quit)  # 关闭窗口

filemenu1 = tk.Menu(menubar, tearoff=0)  # 菜单栏上面的选项
menubar.add_cascade(label='file1', menu=filemenu1)  # 在munubar上面加上我所定义的filemenu, 起名为file
filemenu1.add_command(label='New', command=do_job)  # 在file中加入可选的选项, 功能
filemenu1.add_command(label='Open', command=do_job)
filemenu1.add_command(label='Save', command=do_job)  # 都执行同样的功能
filemenu1.add_separator()  # 加一条分割线
filemenu1.add_command(label='Exit', command=window.quit)  # 关闭窗口

filemenu2 = tk.Menu(filemenu1)  # 同上述
filemenu1.add_cascade(label='import', menu=filemenu2)
filemenu2.add_command(label='filefile', command=do_job)
filemenu2.add_command(label='i love you', command=do_job)


window.config(menu=menubar)
window.mainloop()

Python的GUI界面_第8张图片

八、Frame框架

import tkinter as tk

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽
tk.Label(window, text='on the window').pack()  # 这个标签放在主界面上, pack就是一层层放下来

frm = tk.Frame(window)  # 再生成一个窗口, 放在window上
frm.pack()
frm_l = tk.Frame(frm)  # 再生成两个小窗口, 放在frm上
frm_r = tk.Frame(frm)
frm_l.pack(side='left')  # side是设置方位, 这里是在在左边和右边
frm_r.pack(side='right')
tk.Label(frm_l, text='on the frm_l1').pack()  # 将再成标签, 放在frm_l上, 再pack
tk.Label(frm_l, text='on the frm_l2').pack()
tk.Label(frm_r, text='on the frm_r1').pack()
window.mainloop()

Python的GUI界面_第9张图片

九、messagebox弹窗

import tkinter as tk
import tkinter.messagebox as tm  # 这里单独导入

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽


def hit_me():
    tm.showinfo(title='Hi', message='hahaha')  # 弹出显示信息窗口
    tm.showwarning(title='Hi', message='nonono')  # 弹出警告窗口
    tm.showerror(title='Hi', message='error!')  # 弹出错误窗口
    print(tm.askquestion(title='Hi', message='hahaha'))  # 会弹出 是(Y)/否(N),这可以作为该函数的返回值进行打印(返回yes/no)
    print(tm.askyesno(title='Hi', message='hahaha'))  # 与上述一样, 返回True / False
   
   
tk.Button(window, text='hit me', command=hit_me).pack()
window.mainloop()

十、放置位置 pack,grid,place

import tkinter as tk


window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

tk.Label(window, text=1).pack(side='top')  # 放上面
tk.Label(window, text=2).pack(side='bottom')  # 放下面
tk.Label(window, text=3).pack(side='left')
tk.Label(window, text=4).pack(side='right')

window.mainloop()

Python的GUI界面_第10张图片

import tkinter as tk


window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

for i in range(4):
    for j in range(3):                    # 设置放在什么位置
        tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10)  # padx是外部的展开(单位变大) pady同理, 方向不同,在前加一个i,即ipadx,ipady即是内部的展开

window.mainloop()

Python的GUI界面_第11张图片

import tkinter as tk


window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('200x200')  # 长和宽

for i in range(4):
    for j in range(3):                             # anchor 表示以什么为参数,nw是north,west的简写
        tk.Label(window, text=1).place(x=10, y=100, anchor='nw')  # 单独指定放在某一个位置

window.mainloop()

Python的GUI界面_第12张图片
一个小例子(登录窗口)

import tkinter as tk
import time

window = tk.Tk()  # 一个窗口
window.title('my window')  # 标题
window.geometry('400x300')  # 长和宽

user1 = 'dzc'
password1 = 'dzc'
user2 = "未知字符"
password2 = "未知字符"


def Catch():  # 这是登录按钮事件, 必须满足条件才能登录.
    def Close():
        window4.destroy()

    if (var1.get() == user1) & (var2.get() == password1) or (var1.get() == user2) & (var2.get() == password2):
        window1 = tk.Tk()
        window1.title("你要干什么!")
        window1.geometry('400x300')
    else:
        window4 = tk.Tk()
        window4.title('my window')  # 标题
        window4.geometry('400x300')  # 长和宽
        l = tk.Label(window4, text='没有该账户,是否立即注册?')  # 登录失败会提示是否注册用户
        l.pack()
        tk.Button(window4, text='不用', width=15, height=1, command=Close).place(x=60, y=240)
        tk.Button(window4, text='注册', width=15, height=1, command=Set).place(x=220, y=240)


def Set():  # 注册用户窗口
    window2 = tk.Tk()
    window2.title("注册界面....")
    window2.geometry("400x300")
    tk.Label(window2, text='User name').place(x=50, y=150)  # 构造与主窗口类似
    tk.Label(window2, text='password').place(x=50, y=190)
    var3 = tk.StringVar()
    var4 = tk.StringVar()
    tk1 = tk.Entry(window2, textvariable=var3)
    tk1.place(x=200, y=150)
    tk2 = tk.Entry(window2, textvariable=var4)
    tk2.place(x=200, y=190)

    def ZhuCe():
        global user2  # 注册的赋值
        global password2
        user2 = tk1.get()
        password2 = tk2.get()
        window3 = tk.Tk()
        l = tk.Label(window3, text='注册成功!')
        l.pack()
        window2.destroy()

    tk.Button(window2, text='确认', width=15, height=1, command=ZhuCe).place(x=200, y=240)


tk.Label(window, text='User name').place(x=50, y=150)  # 主窗口上的标签, 用于提示
tk.Label(window, text='password').place(x=50, y=190)
var1 = tk.StringVar()
var2 = tk.StringVar()
tk.Entry(window, textvariable=var1).place(x=200, y=150)  # 主窗口上的输入框, 用于交互
tk.Entry(window, textvariable=var2, show='*').place(x=200, y=190)
tk.Button(window, text='登录', width=15, height=1, command=Catch).place(x=60, y=240)  # 主窗口上的按钮, 用于交互
tk.Button(window, text='注册', width=15, height=1, command=Set).place(x=220, y=240)

window.mainloop()

完结!

你可能感兴趣的:(Python基础笔记,python,tkinter)