tkinter

  • 一、输入框
  • 二、按钮Button
  • 三、标签Label
  • 结合输入框、标签、按钮举例:一个简易的计算器
  • 四、菜单栏Menu
  • 五、单选按钮RadioButton


一、输入框

Entry(父容器)

from tkinter import *

root = Tk()   #创建一个根窗口

#窗口的大小为300x300,初始位置为(100,100)
root.geometry('300x300+100+100')

#1.创建组件,第一个参数为父容器
op1 = Entry(root)#输入框
op2 = Entry(root)
#2.把组件显示出来:pack,grid
op1.pack(fill=BOTH)
op2.pack()

mainloop()    #让界面不要马上退出

Python中tk python中tkinter输入框_python

二、按钮Button

Button(父容器text=‘按钮上需要显示的内容’,padx = num1, pady = num2,command=fun)

padx:按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离
pady:按钮在y轴方向上的内边距(padding)

commond:按钮被点击时,调用的函数fun()

from tkinter import *

root = Tk()   #创建一个根窗口
#1.创建
btn_1 = Button(root,text='我是按钮1',padx = 30,pady = 10)
btn_2 = Button(root,text='我是按钮2',padx = 30,pady = 10)
#2.显示
btn_1.grid(row = 0,column = 0,sticky='WE')
btn_2.grid(row = 0,column = 1,sticky='WE')

mainloop()    #让界面不要马上退出

sticky:指定对齐方式,默认居中

N:上对齐

S:下对齐

W:左对齐

E:右对齐

可以单独使用,也可以结合使用

Python中tk python中tkinter输入框_内边距_02

三、标签Label

①Label(父容器,text=‘标签上显示的内容’)
这种情况下,text的值后续不能再更改
②res_var = StringVar()
Label(父容器,textvariable=res_var)
这种情况下,通过res_var.set(‘填写需要更改的内容’)后续可以更改text的值

from tkinter import *

root = Tk()   #创建一个根窗口

def fun():
	context = en.get()    #得到输入框的输入
	res_var.set(context)  #更改标签的text值

#创建
en = Entry(root)       #输入框
res_var = StringVar()
res_var.set('我是标签')    #为标签的text赋初值
lab = Label(root,textvariable = res_var)  #标签
btn = Button(root,text='修改标签的内容',command = fun) #按钮
#显示
en.grid(row = 0,column = 0)
lab.grid(row = 1,column = 0)
btn.grid(row = 2,column = 0)

mainloop()    #让界面不要马上退出

Python中tk python中tkinter输入框_tkinter_03

结合输入框、标签、按钮举例:一个简易的计算器

from tkinter import *
import re

root = Tk()   #创建一个根窗口

#验证输入是否合法
#-228.12:
#首先是+-开头,但也可以没有
#1到多个数字
#可以有.,也可以没有
#1到多个数字
#'^[+-]?[\d]+[.]?[\d]*$'
"""
正则匹配串书写:以^开头,以$结尾
[\d]表示数字 
?表示前面的[]可以有0个也可以有1个
+表示前面的[]可以有1个或多个
*表示前面的[]可以有0个或者多个
"""
def validate_input():
	reg = '^[+-]?[\d]+[.]?[\d]*$'
	r1 = re.match(reg, op1.get())
	r2 = re.match(reg, op2.get())
	return r1 and r2

def cmd_math(ops):
	is_valid = validate_input()
	if is_valid:
		op1_value = float(op1.get())
		op2_value = float(op2.get())
		if ops == '+':
			res = op1_value + op2_value
		elif ops == '-':
			res = op1_value - op2_value
		elif ops == '*':
			res = op1_value * op2_value
		elif ops == '/':
			res = op1_value / op2_value
		elif ops == '%':
			res = op1_value % op2_value
		elif ops == '//':
			res = op1_value // op2_value
		elif ops == '**':
			res = op1_value ** op2_value

		res_var.set(round(res,3))
	else:
		res_var.set("请输入正确的操作数")

def clear():
	op1.delete(0,END)
	op2.delete(0,END)
	res_var.set('Show Result')

#输入框
op1 = Entry(root)
op2 = Entry(root)
#按钮
"""
padx:按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离
pady:按钮在y轴方向上的内边距(padding)
"""
#所有组件,创建时第一个参数为父容器
btn_add = Button(root,text='+', padx = 30, pady = 10,command = lambda: cmd_math('+'))
btn_sub = Button(root,text='-', padx = 30, pady = 10,command = lambda: cmd_math('-'))
btn_mul = Button(root,text='*', padx = 30, pady = 10,command = lambda: cmd_math('*'))
btn_div = Button(root,text='/', padx = 30, pady = 10,command = lambda: cmd_math('/'))
btn_mod = Button(root,text='%', padx = 30, pady = 10,command = lambda: cmd_math('%'))
btn_flo = Button(root,text='//', padx = 30, pady = 10,command = lambda: cmd_math('//'))
btn_exp = Button(root,text='**', padx = 30, pady = 10,command = lambda: cmd_math('**'))
btn_clr = Button(root,text='Clear', padx = 30, pady = 10,command = clear)
#标签
"""
直接指定text的值后,后续将不能再更改text的值
"""
# result = Label(root,text='Show Result',pady = 20)
#以下设计可以在后续更改text的值
res_var = StringVar()
res_var.set('Show Result')
result = Label(root,textvariable=res_var,pady = 20)
"""
sticky:指定对齐方式,默认居中
N:上对齐
S:下对齐
W:左对齐
E:右对齐
可以单独使用,也可以结合使用
"""
#columnspan指定跨的列数;rowspan指定跨的行数
op1.grid(row = 0,column = 0, columnspan = 4,sticky = 'WE')
op2.grid(row = 1,column = 0, columnspan = 4,sticky = 'WE')
btn_add.grid(row = 2,column = 0,sticky = 'WE')
btn_sub.grid(row = 2,column = 1,sticky = 'WE')
btn_mul.grid(row = 2,column = 2,sticky = 'WE')
btn_div.grid(row = 2,column = 3,sticky = 'WE')
btn_mod.grid(row = 3,column = 0,sticky = 'WE')
btn_flo.grid(row = 3,column = 1,sticky = 'WE')
btn_exp.grid(row = 3,column = 2,sticky = 'WE')
btn_clr.grid(row = 3,column = 3,sticky = 'WE')
result.grid(row = 4,column = 0,columnspan = 4,sticky = 'WE')



mainloop()    #让界面不要马上退出

Python中tk python中tkinter输入框_内边距_04

四、菜单栏Menu

①基础设计

from tkinter import *

root = Tk()   #创建一个根窗口

menubar = Menu(root)

menu1 = Menu(menubar)
menu1.add_command(label = '关卡1')
menu1.add_command(label = '关卡2')
menubar.add_cascade(label = '关卡',menu = menu1)

menu2 = Menu(menubar)
menu2.add_command(label = '普通')
menu2.add_command(label = '简单')
menu2.add_command(label = '困难')
menubar.add_cascade(label = '难度',menu = menu2)

root.config(menu = menubar)

mainloop()

Python中tk python中tkinter输入框_内边距_05


②带command的详细设计

from tkinter import *

root = Tk()   #创建一个根窗口

menubar = Menu(root)

menu1 = Menu(menubar)
menu1.add_command(label = '普通',command = lambda:f1.tkraise())
menu1.add_command(label = '文艺',command = lambda:f2.tkraise())
menubar.add_cascade(label = '模式',menu = menu1)

root.config(menu = menubar)

f2 = Frame(root)
f2.grid(row = 0,column = 0,sticky = 'NEWS')
la2 = Label(f2,text='该页面对应的是模式菜单栏下的文艺,这里是f2',padx = 30,pady = 10)
la2.grid(row = 0,column = 0)

f1 = Frame(root)
f1.grid(row = 0,column = 0,sticky = 'NEWS')
la1 = Label(f1,text='该页面对应的是模式菜单栏下的普通,这里是f1',padx = 30,pady = 10)
la1.grid(row = 0,column = 0)


mainloop()

Python中tk python中tkinter输入框_python_06


Python中tk python中tkinter输入框_python_07


Python中tk python中tkinter输入框_Python中tk_08

五、单选按钮RadioButton

from tkinter import *

root = Tk()   #创建一个根窗口

def check_sex():
	context = v.get()   #得到单选按钮选中的按钮的value值
	l_var.set(f'你选中了{context}按钮')

v = StringVar()
v.set('man')    #选中value=man的按钮
man_rbtn = Radiobutton(root,variable = v,text='男性',value = 'man',command = check_sex)
woman_rbtn = Radiobutton(root,variable = v,text='女性',value = 'woman',command = check_sex)

l_var = StringVar()
l_var.set('默认选中男性按钮')
label = Label(root,textvariable=l_var)

man_rbtn.grid(row = 0, column = 1)
woman_rbtn.grid(row = 0, column = 2) 
label.grid(row = 1,column = 0,columnspan = 4)


mainloop()

Python中tk python中tkinter输入框_内边距_09