Python笔记_第四篇_高阶编程_GUI编程之Tkinter_2.控件类
1. Label控件:
说明:标签控件,可显示文本
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- # Label:标签控件,可以显示文本
- # win:父窗体
- # text:显示的文本内容
- # width: 高度
- # height:宽度
- # bg:背景色
- # fb:字体颜色,前景色
- # font:字体和字体的大小
- # wraplength:指定text文本中多宽进行换行
- # justify:设置换行后的对齐方方法
- # anchor:位置 e s w n(东南西北),center中心,es,ws,en,wn(东南,西南,东北,西北)
- label = tkinter.Label(win,
- text="Thomas is a good man",
- bg = "black",
- fg = "white",
- font = ("黑体",),
- width = ,
- height = ,
- wraplength = ,
- justify = "left",
- anchor = "e")
- # 显示出来
- label.pack()
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:让标签显示出现要进行pack放置的命令。
2. Button控件:
说明:
Button控件表示按钮。
图示1:
实例1:
- import tkinter
- def func():
- print("Thomas is a good man")
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- # Button:创建按钮
- # win:父窗体
- # text:显示的文本内容
- button1 = tkinter.Button(win, text="按钮", command=func, width=, height=)
- # func:写函数的方式
- button1.pack()
- button2 = tkinter.Button(win, text="按钮", command=lambda:print("Thomas is handsome man"),
- width=, height=)
- # lambda表达式
- button2.pack()
- button3 = tkinter.Button(win, text="按钮", command=win.quit, width=, height=)
- # win.quit/win.destroy 退出
- button3.pack()
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:comand用于放置事件,事件一般可以导入函数形式、lambda表达式方式、或者win.quit的内置函数。
3.Entry控件:
说明1:
Entry表示为输入控件,用于显示简单的文本。
图示1:
实例1:
- import tkinter
- def func():
- print("Thomas is a good man")
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- # Entry:输入控件
- # 用于显示简单的文本内容
- # 绑定变量
- e = tkinter.Variable()
- # show 密文显示 ****/....等
- #
- entry = tkinter.Entry(win, show = "*",textvariable = e)
- entry.pack()
- # e就代表输入框这个对象
- # 设置值
- e.set("sunck is a good man")
- # 取值
- print(e.get())
- print(entry.get())
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:在这里用于到了绑定变量,绑定变量用textvariable来接受这个绑定变量,绑定变量分数值型、布尔型等。其中获取变量用的get方式获取。
说明2:
我们在用一个点击输出内容的方式。
图示2:
实例2:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- def showInfo():
- print(entry.get())
- entry = tkinter.Entry(win)
- entry.pack()
- button = tkinter.Button(win,text="按钮",command=showInfo)
- button.pack()
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:用于点击输入的方式。
4. Text控件:
说明1:
普通的文本控制方式,用于显示多行文本,不带滚动条。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- # Text:文本控件。用于显示多行文本。
- # heigth:表示显示的行数
- text = tkinter.Text(win,width=,height=)
- text.pack()
- str = '''I stand here today humbled by the task before us, grateful for the trust you have bestowed, mindful of the sacrifices borne by our ancestors. I thank President Bush for his service to our nation, as well as the generosity and cooperation he has shown throughout this transition.
- '''
- # 插入文本
- text.insert(tkinter.INSERT,str)
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:插入文本我们用了一个insert的方式。
说明2:
用于显示文本的滚动条。
图示2:
实例2:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- # win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- # 创建滚动条
- scroll = tkinter.Scrollbar()
- text = tkinter.Text(win,width=,height=)
- # side放到窗体的那一侧,fill把Y轴方向填满。
- scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)
- text.pack(side=tkinter.LEFT,fill=tkinter.Y)
- # 关联
- scroll.config(command=text.yview)
- text.config(yscrollcommand=scroll.set)
- str = '''
- I stand here today humbled by the task before us, grateful for the trust you have bestowed, mindful of the sacrifices borne by our ancestors. I thank President Bush for his service to our nation, as well as the generosity and cooperation he has shown throughout this transition.
- '''
- # 插入文本
- text.insert(tkinter.INSERT,str)
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:注意这里我们用到了一个config的方法去设置位置。
5. CheckButton控件:
说明:
这个叫多选框控件。后面有对应的单选框控件。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- # CheckButton:多选框控件
- def update():
- message =""
- if hobby1.get() == True:
- message += "money\n"
- if hobby2.get() == True:
- message += "power\n"
- if hobby3.get() == True:
- message += "people\n"
- # 清除所有text所有内容
- text.delete(0.0,tkinter.END)
- text.insert(tkinter.INSERT,message)
- # 要绑定的变量
- hobby1 = tkinter.BooleanVar()
- # 多选框
- check1 = tkinter.Checkbutton(win,text="Money",variable=hobby1,command=update)
- check1.pack()
- hobby2 = tkinter.BooleanVar()
- check2 = tkinter.Checkbutton(win,text="power",variable=hobby2,command=update)
- check2.pack()
- hobby3 = tkinter.BooleanVar()
- check3 = tkinter.Checkbutton(win,text="people",variable=hobby3,command=update)
- check3.pack()
- text = tkinter.Text(win,width=,height=)
- text.pack()
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:我们这里还用到一个布尔型的绑定变量。
6. RadioButton控件:
说明1:
单选框控件。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+500") #格式:400x400表示大小,200和0表示位置
- # Radiobutton:单选框控件
- def update():
- print(r.get())
- # 绑定变量
- # 注意:一组单选框要绑定同一个变量
- r = tkinter.IntVar() #绑定整型
- # r = tkinter.StringVar() # 绑定字符串
- radio1 = tkinter.Radiobutton(win,text="one",value=,variable=r,command=update)
- radio1.pack()
- radio2 = tkinter.Radiobutton(win,text="two",value=,variable=r,command=update)
- radio2.pack()
- radio3 = tkinter.Radiobutton(win,text="three",value=,variable=r,command=update)
- radio3.pack()
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
7. Listbox控件:
说明1:
列表框控件。可以包含一个或多个文本框。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Listbox:列表框控件。可以包含一个或多个文本框。
- # 所用:在Listbox小窗口显示一个字符串。常用于目录选择。
- # 、创建一个Listbox,添加几个元素
- listbox = tkinter.Listbox(win,selectmode=tkinter.BROWSE)
- listbox.pack()
- for item in ["good","nice","handsome","cool","vg","vn"]:
- # 按顺序添加
- listbox.insert(tkinter.END,item)
- # 在开始添加
- # listbox.insert(tkinter.ACTIVE,"cool")
- # 将列表当做一个元素添加
- # listbox.insert(tkinter.END,["very good","very nice"])
- # 删除:
- # 参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只删除第一个索引处的内容
- # listbox.delete(,)
- # 下标为1的元素
- # listbox.delete()
- # 选中
- listbox.select_set(,)
- # listbox.select_set()
- # 取消
- # listbox.select_clear(,)
- # listbox.select_clear()
- # 获取到列表中的元素个数
- # print(listbox.size())
- # 获取值,返回一个元组
- # print(listbox.get(,))
- # print(listbox.get())
- # 返回当前的索引项,不是item元素
- print(listbox.curselection())
- # 判断一个选项是否被选中,返回为布尔值
- print(listbox.select_includes())
- print(listbox.select_includes())
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
说明2:
列表框控件。可以包含一个或多个文本框。在Listbox小窗口显示一个字符串。用于目录选择。与BROWSE相似,但不支持鼠标移动选中位置。
图示2:
实例2:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Listbox:列表框控件。可以包含一个或多个文本框。
- # 所用:在Listbox小窗口显示一个字符串。常用于目录选择。
- # 绑定变量
- lbv = tkinter.StringVar()
- # 与BROWSE相似,但不支持鼠标移动选中位置。
- lb = tkinter.Listbox(win,selectmode=tkinter.SINGLE,listvariable=lbv)
- lb.pack()
- for item in ["good","nice","handsome","cool","vg","vn"]:
- # 按顺序添加
- lb.insert(tkinter.END,item)
- # 打印当前列表中的选项
- print(lbv.get())
- # 设置选项
- lbv.set(("","",""))
- # 绑定事件
- def myPrint(event): # event需要一个时间参数不用传参
- print(lb.get(lb.curselection()))
- lb.bind('<Double-Button-1>',myPrint) # 点两下-按钮-鼠标左键
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
说明3:
Listbox里诶包控件。可以包含一个或多个文本框。
图示3:
实例3:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- # win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Listbox:列表框控件。可以包含一个或多个文本框。
- # 所用:在Listbox小窗口显示一个字符串。常用于目录选择。
- # EXTENDED:可以使Listbox支持shift和control,实现连选和多选。
- lb = tkinter.Listbox(win,selectmode=tkinter.EXTENDED)
- for item in ["good","nice","handsome","cool","vg","vn","good1","nice1","handsome1","cool1","vg1","vn1","good3","nice3","handsome3","cool3","vg3","vn3"]:
- # 按顺序添加
- lb.insert(tkinter.END,item)
- # 滚动条
- sc = tkinter.Scrollbar(win)
- sc.pack(side=tkinter.RIGHT,fill=tkinter.Y)
- lb.configure(yscrollcommand=sc.set)
- lb.pack(side=tkinter.LEFT,fill=tkinter.BOTH)
- # 额外给属性赋值
- sc['command'] = lb.yview # command是这个数据类型中的键名,赋值给给内容
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
说明4:
MULTIPLE支持多选。
图示4:
实例4:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- # win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Listbox:列表框控件。可以包含一个或多个文本框。
- # 所用:在Listbox小窗口显示一个字符串。常用于目录选择。
- # MULTIPLE:支持多选。
- lb = tkinter.Listbox(win,selectmode=tkinter.MULTIPLE)
- lb.pack()
- for item in ["good","nice","handsome","cool","vg","vn","good1","nice1","handsome1","cool1","vg1","vn1","good3","nice3","handsome3","cool3","vg3","vn3"]:
- # 按顺序添加
- lb.insert(tkinter.END,item)
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
8. Scale控件:
说明1:
供用户通过拖拽指示器改变变量的值。可以说也可以竖直。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # 供用户通过拖拽指示器改变变量的值。可以水平,也可以竖直
- # orient=tkinter.HORIZONTAL/VERTICAL 水平/竖直拖拽,默认是竖直的
- # lenght:水平时表示宽度,顺直时表示高度
- # tickinterval 选择值将会为该值的倍数
- scale = tkinter.Scale(win,from_=,to=,orient=tkinter.VERTICAL,tickinterval=,length=)
- scale.pack()
- # 设置值
- scale.set()
- # 获取值
- def showNum():
- print(scale.get())
- tkinter.Button(win,text="按钮",command=showNum).pack()
- print(scale.get())
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
9. Spinbox控件:
说明1:
数值范围控件。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Spinbox:数值范围控件
- # increment=:步长,默认为1
- # values:最好不要from_/to一起使用。value=(,,,,)
- # command:只要值改变就会执行对应的方法
- # 添加方法
- def update():
- print(v.get())
- # 绑定变量
- v = tkinter.StringVar()
- sp = tkinter.Spinbox(win,from_=,to=,increment=,textvariable=v,command=update)
- sp.pack()
- # 设置值
- v.set()
- # 取值
- print(v.get())
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
10. Menu控件:
说明1:
菜单控件。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Menu:顶层菜单
- # 菜单条
- menubar = tkinter.Menu(win)
- # 设置菜单
- win.config(menu=menubar)
- # 设置命令方法
- def func():
- print("Thomas is a good man")
- # 创建一个菜单选项
- menu1 = tkinter.Menu(menubar,tearoff=False)
- # 给菜单选项添加内容
- for item in ["Python","C","C++","OC","Swift","C#","shell","Java","JS","PHP","汇编","NodeJS","退出"]:
- if item == "退出":
- # 添加分割线
- menu1.add_separator()
- menu1.add_command(label=item,command=win.quit)
- else:
- menu1.add_command(label=item,command=func)
- # 向菜单条上添加菜单选项
- menubar.add_cascade(label="语言",menu=menu1)
- # 在创建一个
- menu2 = tkinter.Menu(menubar,tearoff=False)
- menu2.add_command(label="red")
- menu2.add_command(label="blue")
- menubar.add_cascade(label="颜色",menu=menu2)
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
说明2:
图示2:
实例2:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Menu:顶层菜单
- # 菜单条
- menubar = tkinter.Menu(win)
- menu = tkinter.Menu(menubar,tearoff=False)
- # 给菜单选项添加内容
- for item in ["Python","C","C++","OC","Swift","C#","shell","Java","JS","PHP","汇编","NodeJS","退出"]:
- menu.add_command(label=item)
- menubar.add_cascade(label="语言",menu=menu)
- # 板顶鼠标右键
- def showMenu(event): #
- menubar.post(event.x_root,event.y_root)
- win.bind("<Button-2>",showMenu) # 2是滚轮,3是右键,1是左键
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
11. Combobox下拉控件:
说明1:
下拉控件。
图示1:
实例1:
- import tkinter
- from tkinter import ttk
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Combobox:下拉控件
- # 绑定变量
- cv = tkinter.StringVar()
- com = ttk.Combobox(win,textvariable=cv)
- com.pack()
- # 设置下拉数据
- com["value"] = ("黑龙江","吉林","辽宁")
- # 设置默认值
- com.current()
- # 绑定事件
- def func(event):
- print(com.get())
- # print("Thomas is a good man")
- com.bind("<<ComboboxSelected>>",func)
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
12. Frame控件:
说明1:
在屏幕上显示矩形区域,多作为容器控件。是按照纵向区域来选择的。
图示1:
实例1:
- import tkinter
- # 创建主窗口__编程头部
- win = tkinter.Tk()
- # 设置标题
- win.title("Thomas的窗口")
- # 设置大小和位置
- win.geometry("400x400+1500+100") #格式:400x400表示大小,200和0表示位置
- # Frame:框架控件
- # 在屏幕上显示一个矩形区域,多作为容器控件。是按照纵向区域来选的。
- frm = tkinter.Frame(win)
- frm.pack()
- # left
- frm_l = tkinter.Frame(frm)
- tkinter.Label(frm_l,text="左上",bg="pink").pack(side=tkinter.TOP)
- tkinter.Label(frm_l,text="左下",bg="blue").pack(side=tkinter.TOP)
- # left放置
- frm_l.pack(side=tkinter.LEFT)
- # right
- frm_r = tkinter.Frame(frm)
- tkinter.Label(frm_r,text="右上",bg="red").pack(side=tkinter.TOP)
- tkinter.Label(frm_r,text="右下",bg="yellow").pack(side=tkinter.TOP)
- # right放置
- frm_r.pack(side=tkinter.RIGHT)
- # 保持循环不让窗口关闭__编程尾部
- win.mainloop()
备注:
Python笔记_第四篇_高阶编程_GUI编程之Tkinter_2.控件类的更多相关文章
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述
1. GUI概述: GUI全称为Graphical User Interface,叫做图形用户界面,也是一种交互方式(Interaction).早期计算机使用的命令行界面(command-line i ...
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_3.数据显示
1. 表格数据显示: 图示: 实例: import tkinter from tkinter import ttk # 创建主窗口__编程头部 win = tkinter.Tk() # 设置标题 wi ...
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_6.附录
1. 事件附录: 2. 事件属性附录:
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_5.鼠标事件
1. 鼠标点击事件: 图示: 实例: import tkinter from tkinter import ttk # 创建主窗口__编程头部 win = tkinter.Tk() # 设置标题 wi ...
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_4.布局
1. 绝对布局: 图示: 实例: import tkinter from tkinter import ttk # 创建主窗口__编程头部 win = tkinter.Tk() # 设置标题 win. ...
- Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。
1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- Python开发【第十三篇】高阶函数、递归函数、闭包
函数式编程是指用一系列函数解决问题 好处:用每个函数完成每个细小的功能,一系列函数任意组合能够解决大问题 函数仅仅接收输入并产生输出,不包含任何能影响输出的内部状态 函数之间的可重入性 当一个函数的输 ...
- python学习三十四天函数高阶函数定义及用法
python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...
随机推荐
- CSS实现背景图片透明和文字不透明效果
1.毛玻璃效果:背景图 + 伪类 + flite:blur(3px) width: 500px; height: 300px; line-height: 50px; text-align: cente ...
- 19 01 17 Django 模型 使用mysql数据库
今天演示使用MySQL数据库,这是Web项目首选的数据库. 进入虚拟环境py_django. workon py_django 在/home/python/pytest目录下创建项目test2. dj ...
- kettle将csv文件导入数据库
具体过程学习了: 1.连接数据库 2.添加新资源库 3.选择Other Repositories 4.选择Database Repository,第二个需要配置额外参数 5.连接数据库相关设置 6.连 ...
- JS的BOM对象
BOM对象 (一)简介:BOM对象,即浏览器对象模型: 通过javascript的对象,操作和浏览器相关的操作 B: Browser,浏览器 O: Object,对象 M: Model,模型 (1) ...
- Uber推出全新交通估算体系能颠覆传统模式吗?
当下,大众的交通出行正在被全面颠覆.除了传统的出行方式外,共享打车.共享单车.共享滑板车.分时租赁的共享汽车等,正在形成一个全新交通出行矩阵.鉴于交通出行市场的巨大潜力,众多巨头及独角兽企业在绞尽脑汁 ...
- pytorch 自动求梯度
自动求梯度 在深度学习中,我们经常需要对函数求梯度(gradient).PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播.本节将介绍如何使用autogra ...
- DRF框架之序列化器初体验
首先,我们需要明白序列化和反序列化的过程指的是什么. 序列化操作:将模型数据 ---> 字典数据 --->JSON数据(响应JSON数据的操作) 反序列化操作:将JSON数据 ---> ...
- 关于域名转发proxy_pass
在配置nginx的时候,有一个需求,访问m.XXX.com的时候,需要实际访问www.YYY.com/m,并且域名不能发生变化. 达成这个需求有两种做法: 第一种就是301跳转,使用rewrite来跳 ...
- 五年Java经验,面试还是说不出日志该怎么写更好?——日志规范与最佳实践篇
本文是一个系列,欢迎关注 查看上一篇文章可以扫描文章下方的二维码,点击往期回顾-日志系列即可查看所有相关文章 概览 上一篇我们讨论了为什么要使用日志框架,这次我们深入问题的根源,为什么我们需要日志? ...
- try,catch,finally尝试(一个程序块多个catch)
曾学过c++,但是对这些异常捕捉不是很了解,通过别的编程语言了解 public class newclass { public static void main(String[] args) { tr ...