python-tkinter库的常用操作

注:注释是重点!!!(结尾有福利)

thinter常用知识总结

    • 注:注释是重点!!!(结尾有福利)
  • tkinter简介
    • 开端与Label
      • 示例代码+详细注释
    • 按钮button
      • 示例代码+详细注释
    • 输入文本框Entry,Text
      • 示例代码+详细注释
    • 列表部件Listbox
      • 示例代码+详细注释
    • 尺度scale
      • 示例代码+详细注释
    • 复选框Checkbutton
      • 示例代码+详细注释
    • 画布Canvas
      • 示例代码+详细注释
    • 菜单栏menubar
      • 示例代码+详细注释
    • 框架Frame
      • 示例代码+详细注释
    • 弹窗messagebox
      • 示例代码+详细注释
    • 放置位置pack,grid,place
      • 示例代码+详细注释
  • 运用tkinter库做一个视频破解小项目

tkinter简介

Tkinter是Python的事实上的标准GUI(图形用户界面)软件包。它是Tcl / Tk之上的薄的面向对象层。
Tkinter不是唯一的Python GuiProgramming工具包。但是,它是最常用的一种。CameronLaird称每年做出的保留TkInter的决定是“ Python世界的次要传统之一”。
其为第三方库,tkinter官网

开端与Label

label : 用于显示文本

示例代码+详细注释

import tkinter as tk
window = tk.Tk()  # 创建一个窗口
window.title('my window')  # 窗口名
window.geometry('200x100')   # 设置窗口200为长,100为高
var = tk.StringVar()  #StringVar:跟踪变量的值的变化,以保证值的变更随时可以显示在界面上
# 窗口里的字。 bg:背景颜色, font字体, 12字体大小, Label的width与height
l = tk.Label(window, textvariable=var, bg='green', font=('Arial', 12), width=15, height=2)
var.set("HHH")  # 设置Label上显示的内容
l.pack()  # 固定在窗口wondow上
window.mainloop()  # 使窗口活动起来

按钮button

点击触发自己设置的功能

示例代码+详细注释

结合Label

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('200x100')
var = tk.StringVar()
l = tk.Label(window, textvariable=var, bg='yellow', font=('Arial', 12), width=15, height=2)
l.pack()
on_hit = False

def hit_me():
    global on_hit
    if on_hit==False:
        on_hit = True
        var.set('you hit me')  # 设置Label上显示的内容
    else:
        on_hit = False
        var.set('')  # 设置Label上显示的内容

# window:显示在window窗口, text:按钮上的文字, width,height:按钮的宽度与高度, command:绑定的命令(函数),不要再加括号, bg:设置背景颜色
b = tk.Button(window, text='hit me', width=15, height=2, command=hit_me, bg="yellow")
b.pack()
window.mainloop()

输入文本框Entry,Text

可以向其中输入内容并显示出来

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')
e = tk.Entry(window, show="*")  # show=None 则正常显示,show="*",则输入的内容显示*
e.pack()
var = e.get()

def insert_point():
    var = e.get()  # 得到Entry中输入的值
    t.insert('insert', var)  # 'insert'指的是输入指针所在的地方
def insert_end():
    var = e.get()
    t.insert('end', var)  # 'end'指的是输入在最后面

b1 = tk.Button(window, text='insert point', width=15, height=2, command=insert_point)
b1.pack()
b2 = tk.Button(window, text='insert end', width=15, height=2, command=insert_end)
b2.pack()
t = tk.Text(window, height=2)  # 显示输入内容的空间
t.pack()
window.mainloop()

列表部件Listbox

列表框控件,可以包含一个或者多个文本框

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('500x500')
###########################################################
var1 = tk.StringVar()
l = tk.Label(window, bg='yellow', width=40, textvariable=var1)
l.pack()


def print_selection():
    value = lb.get(lb.curselection())  # 光标选定的内容
    var1.set(value)


b = tk.Button(window, text='print selection', width=15, height=2, command=print_selection)
b.pack()

var2 = tk.StringVar()
var2.set((11, 22, 33, 44, "aa"))  # set向var2中添加内容
lb = tk.Listbox(window, listvariable=var2)  # 供选择的项
list_items = [1, 2, 3, 4]
for item in list_items:
    lb.insert('end', item)
lb.insert(1, 'first')  # 增添进去,索引
lb.insert(3, 'second')
lb.delete(2)  # 删除
lb.pack()
window.mainloop()

尺度scale

输出限定范围的数字区间,可以为之指定最大值,最小值及步距值

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')
l = tk.Label(window, bg='yellow', width=20, text='empty')
l.pack()

def print_selection(v):
    l.config(text='you have selected '+v)  # 用于向Label添加内容

v = tk.StringVar()  # v的值与Scale值一致
# label:尺度名,from_,to为范围,orient:确定方向的横向,length为它在屏幕上显示多长(像素),showvalue代表是否显示数字0为不显示,1为显示,
# tickinterval标签的单位长度,resolution为保留小数位数0.01为两位小数(步距值), variable=v绑定变量   digits:总的位数
s = tk.Scale(window, label='try me', from_=5, to=11, orient=tk.HORIZONTAL, length=200, showvalue=1, tickinterval=3, resolution=0.01, command=print_selection, variable=v, digits=8)
s.pack()
window.mainloop()

复选框Checkbutton

用来选取我们需要的选项,它前面有个小正方形的方块,如果选中则有一个对号,也可以再次点击以取消该对号来取消选中。

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')
l = tk.Label(window, bg='yellow', width=20, text='empty')
l.pack()

def print_selection():
    if(var1.get() == 1) & (var2.get() == 0):  # get: 获取Checkbutton的值
        l.config(text='I love python')
    elif(var1.get() == 0) & (var2.get() == 1):
        l.config(text='I 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, command=print_selection)
#  选上则值1,没选上则值为0
c2 = tk.Checkbutton(window, text='C++', variable=var2, onvalue=1, offvalue=0, command=print_selection)
c1.pack()
c2.pack()
window.mainloop()

画布Canvas

用来绘图, 可以将图形,文本,小部件或框架放置在画布上。

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')
# 创建一个Canvas,设置其背景色为白色
cv = tk.Canvas(window, bg='yellow', )
# 创建一个矩形,坐标为(10,10,110,110)
cv.create_rectangle(10, 10, 110, 110)
# 创建一个扇形
coord = 10, 50, 240, 210
cv.create_arc(coord, start=0, extent=150, fill="blue")  # 以蓝色填充
# 创建线条
cv.create_line(0, 200, 250, 300)  # 起点与终点的坐标
cv.pack()
tk.mainloop()

菜单栏menubar

用来创建菜单栏

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('400x400')


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

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

# 创建一个菜单栏,在窗口的上方
menubar = tk.Menu(window)
# 定义一个空的菜单单元
filemenu = tk.Menu(menubar, tearoff=0)  # tearoff意为下拉
# 将上面定义的空菜单命名为`File`,放在菜单栏中
menubar.add_cascade(label='File', menu=filemenu)
filemenu.add_command(label='New', command=do_job)
filemenu.add_command(label='Save', command=do_job)
filemenu.add_command(label='Open', command=do_job)
filemenu.add_separator()  # 加的那条分割线
filemenu.add_command(label='Exit', command=window.quit)

window.config(menu=menubar)  # 加上这代码,才能将菜单栏显示
window.mainloop()

框架Frame

是在屏幕上的一个区域,主要是作为其他组件的框架基础,或为其他组件提供间距填充。

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('500x400')
tk.Label(window, text='on the window').pack()

# padx:水平方向上的边距, pady: 垂直方向上的边距, relief:边框样式(另外还有raised, sunken, ridge),borderwidth边框宽度
frm = tk.Frame(window, bg="yellow", padx=50, pady=50, relief="groove", borderwidth=10)
frm.pack()
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)
frm_l.pack(side='left')  # 建立在主frm框架上
frm_r.pack(side='right')
tk.Label(frm_l, text='on the frm_l1', bg="red").pack()
tk.Label(frm_l, text='on the frm_l2').pack()
tk.Label(frm_r, text='on the frm_r1').pack()
window.mainloop()

弹窗messagebox

可以弹出有各种提示信息的窗口

示例代码+详细注释

import tkinter as tk
from tkinter import messagebox
window = tk.Tk()
window.title('my window')
window.geometry('400x400')

def hit_me():
    # tk.messagebox.showinfo(title='HI',message='hahahaha')  # title为弹窗头信息,message为弹窗提示信息, 提示消息框
    # tk.messagebox.showwarning(title='Hi',message="nononono")  # 消息警告框
    # tk.messagebox.showerror(title='Hi',message='No!!never')  # 错误消息框
    a = tk.messagebox.askquestion(title='Hi', message='hahahaha')  # 返回'yes','no'
    # a = tk.messagebox.askyesno(title='Hi', message='hahahaha')  # 返回true,false
    # a = tk.messagebox.askokcancel(title='hi', message='hahahah')  # 返回true,false
    # if a==yes:                   #可以得到用户意见后再进行操作
    #  ...................

b = tk.Button(window, text='hit me', command=hit_me)
b.pack()
window.mainloop()

放置位置pack,grid,place

可以控制部件放置的位置

示例代码+详细注释

import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('500x400')

# pack方法
tk.Label(window, text=1).pack(side='top')
tk.Label(window, text=1).pack(side='bottom')  # side来指定位置
tk.Label(window, text=1).pack(side='left')
tk.Label(window, text=1).pack(side='right')


# # grid方法
# for i in range(4):
#     for j in range(3):
#         tk.Label(window, text=1).grid(row=i, column=j, ipadx=10, ipady=20)  # row横行数,column纵行数,ipadx, ipady为间隔距离


# place方法
# tk.Label(window, text=1).place(x=20, y=100, anchor='nw', in_=window)  # nw:绝对坐标, center:相对坐标。 x,y,调位置, in: 来指定放置的容器
window.mainloop()

运用tkinter库做一个视频破解小项目

import re
import tkinter as tk
import tkinter.messagebox as msgbox
import webbrowser
from urllib import parse
window = tk.Tk()
window.title('哈哈哈哈哈哈')
window.geometry('300x250')
var = tk.StringVar()
zc = tk.Label(window, text='输入视频链接:(Ctrl 和 V 一块按可以粘贴哦!!!)')
zc.pack()
e = tk.Entry(window, show=None)
e.pack()
port3 = 'https://www.administratorw.com/admin.php?url='
port4 = 'http://17kyun.com/api.php?url='
port2 = 'http://jx.du2.cc/?url='
port1 = 'http://jx.598110.com/?url='


def bf1():
    if re.match(r'^https?:/{2}\w.+$', e.get()):
        ip = e.get()
        ip = parse.quote_plus(ip)
        webbrowser.open(port1 + ip)
    else:
        msgbox.showerror(title='错误', message='视频链接地址无效,请重新输入!')
        
        
b1 = tk.Button(window, text='播放方法1', font=('楷体', 12), fg='red', width=15, height=2, command=bf1)
b1.pack()


def bf2():
    if re.match(r'^https?:/{2}\w.+$', e.get()):
        ip = e.get()
        ip = parse.quote_plus(ip)
        webbrowser.open(port2 + ip)
    else:
        msgbox.showerror(title='错误', message='视频链接地址无效,请重新输入!')
        
        
b2 = tk.Button(window,text='播放方法2',font=('楷体', 12), fg='Purple',width=15,height=2,command=bf2)
b2.pack()


def bf3():
    if re.match(r'^https?:/{2}\w.+$', e.get()):
        ip = e.get()
        ip = parse.quote_plus(ip)
        webbrowser.open(port3 + ip)
    else:
        msgbox.showerror(title='错误', message='视频链接地址无效,请重新输入!')
        
        
b3 = tk.Button(window,text='播放方法3', font=('楷体', 12), fg='yellow', width=15, height=2, command=bf3)
b3.pack()


def bf4():
    if re.match(r'^https?:/{2}\w.+$', e.get()):
        ip = e.get()
        ip = parse.quote_plus(ip)
        webbrowser.open(port4 + ip)
    else:
        msgbox.showerror(title='错误', message='视频链接地址无效,请重新输入!')
        
        
b4 = tk.Button(window, text='播放方法4', font=('楷体', 12), fg='blue', width=15, height=2, command=bf4)
b4.pack()

window.mainloop()

你可能感兴趣的:(python,tkinter)