Tkinter是Python的事实上的标准GUI(图形用户界面)软件包。它是Tcl / Tk之上的薄的面向对象层。
Tkinter不是唯一的Python GuiProgramming工具包。但是,它是最常用的一种。CameronLaird称每年做出的保留TkInter的决定是“ Python世界的次要传统之一”。
其为第三方库,tkinter官网
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() # 使窗口活动起来
点击触发自己设置的功能
结合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()
可以向其中输入内容并显示出来
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()
列表框控件,可以包含一个或者多个文本框
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()
输出限定范围的数字区间,可以为之指定最大值,最小值及步距值
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()
用来选取我们需要的选项,它前面有个小正方形的方块,如果选中则有一个对号,也可以再次点击以取消该对号来取消选中。
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()
用来绘图, 可以将图形,文本,小部件或框架放置在画布上。
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()
用来创建菜单栏
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()
是在屏幕上的一个区域,主要是作为其他组件的框架基础,或为其他组件提供间距填充。
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()
可以弹出有各种提示信息的窗口
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()
可以控制部件放置的位置
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()
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()