使用tkinter 制作计算器
1 Radiobutton组件
- 单选按钮.
- 需要使用的组件名称
Radiobutton
- 需要使用的组件名称
- 如何使用单选按钮 、
- 单选按钮属于互斥的,只能选用一个。
Radiobutton
按钮选项参数的说明:- text 显示文字。
- variable : 绑定变量。
- value :指定每个按钮代表什么值。
2 计算器 设计步骤
2.1 设计输入框
-
根据分析首先需要导入自带库,并且创建两个输入窗口。
如果你需要在后续的代码中使用e1和e2对象,应该将grid()方法单独写在一行上
import tkinter as tk #首先导入库 # 1.创建tkinter的根窗口 root = tk.Tk() #在输入框前面增加两个值 tk.Label(root, text="第一个值").grid(row=0) tk.Label(root, text="第二个值").grid(row=1) #2, 按照布局来说, 就需要创建两个输入框 #2.1 注意不能这么使用e1 = tk.Entry(root).grid(row=0, column=2, padx=10, pady=10) e1 = tk.Entry(root) e1.grid(row=0,column=2,padx=15,pady=10) e2 = tk.Entry(root) e2.grid(row=1,column=2,padx=15,pady=10) #2.1 开始布局 # 2.循环显示 根窗口 root.mainloop()
2.2 设置4个单选按钮
- 设置单选按钮需要绑定变量,这样后续可以通过变量值来操作。
- 注意:需要绑定共同的变量名。
''' 使用tkinter ''' import tkinter as tk # 1.创建tkinter的根窗口 root = tk.Tk() tk.Label(root, text="第一个值").grid(row=0) tk.Label(root, text="第二个值").grid(row=1) #2, 按照布局来说, 就需要创建两个输入框 e1 = tk.Entry(root) e1.grid(row=0,column=2,padx=15,pady=10) e2 = tk.Entry(root) e2.grid(row=1,column=2,padx=15,pady=10) #2.1 开始布局 #3. 设置变量名 radio = tk.IntVar() #3.1 选择单选按钮 r1 = tk.Radiobutton(root,text="加法",variable=radio,value=1) r1.grid(row =2,column =1) r2 = tk.Radiobutton(root,text="减法",variable=radio,value=2) r2.grid(row =2,column =2) r3 = tk.Radiobutton(root,text="乘法",variable=radio,value=3) r3.grid(row =2,column =3) r4 = tk.Radiobutton(root,text="除法",variable=radio,value=4) r4.grid(row =2,column =4) #tk.Radiobutton(root, variable=var, value=1) # 2.循环显示 根窗口 root.mainloop()
2.3 显示计算区域
-
在tkinter上显示文字或者图片的话, 就需要使用组件Lable。
# 4. 计算结果的区域,显示计算区域 l1 = tk.Label(root, text="计算结果区域") l1.grid(row=4,column = 1,columnspan=2,pady=10)
2.4 计算按钮,调用方法
-
在 设计完计算器输入界面 之后,需要使用提交按钮和计算方法将上面的值进行计算。
- 注意方法的使用。
如果你需要在后续的代码中使用e1对象,应该将grid()方法单独写在一行上
# 6. 方法创建 def func(): ''' 计算器方法调用 :return: ''' # 通过get()来获取Entry中的值 num_1 = int(e1.get()) num_2 = int(e2.get()) # 获取定义的RadioButton中的变量值 v = radio.get() # 进行 逻辑分析 if v == 1: # 相当于选中了 加法的radio res = num_2 + num_1 elif v == 2: res = num_1 - num_2 elif v == 3: res = num_1 * num_2 elif v == 4: res = num_1 / num_2 l1.config(text=res) # 5. 设置按钮提交计算 # 5.1 command 后面接的就是方法名。 b1 = tk.Button(root, text="提交计算", command=func) b1.grid(row=5, column=1, columnspan=2, pady=10)
2.5 完整代码演示程序
-
将上述的步骤组合在一起, 一定要注意, grid不要连接组件使用。
-
注意,
grid()
方法返回None,所以将其赋值给e1
变量后,e1
将成为None。如果你需要在后续的代码中使用e1
对象,应该将grid()
方法单独写在一行上,例如:e1 = tk.Entry(root) e1.grid(row=0, column=2, padx=10, pady=10)
-
全部代码:
''' 使用tkinter ''' import tkinter as tk # 1.创建tkinter的根窗口 root = tk.Tk() tk.Label(root, text="第一个值").grid(row=0) tk.Label(root, text="第二个值").grid(row=1) # 2, 按照布局来说, 就需要创建两个输入框 e1 = tk.Entry(root) e1.grid(row=0, column=2, padx=10, pady=10) e2 = tk.Entry(root) e2.grid(row=1, column=2, padx=10, pady=10) # 2.1 开始布局 # 3. 设置变量名 radio = tk.IntVar() # 3.1 选择单选按钮 r1 = tk.Radiobutton(root, text="加法", variable=radio, value=1) r1.grid(row=2, column=1) r2 = tk.Radiobutton(root, text="减法", variable=radio, value=2) r2.grid(row=2, column=2) r3 = tk.Radiobutton(root, text="乘法", variable=radio, value=3) r3.grid(row=2, column=3) r4 = tk.Radiobutton(root, text="除法", variable=radio, value=4) r4.grid(row=2, column=4) # 4. 计算结果的区域,显示计算区域 l1 = tk.Label(root, text="计算结果区域") l1.grid(row=4, column=1, columnspan=2, pady=10) # 6. 方法创建 def func(): ''' 计算器方法调用 :return: ''' # 6.1通过get()来获取Entry中的值 num_1 = int(e1.get()) num_2 = int(e2.get()) # 获取定义的RadioButton中的变量值 v = radio.get() # 进行 逻辑分析 if v == 1: # 相当于选中了 加法的radio res = num_2 + num_1 #l1.config(text = (num_1+num_2)) #也可以直接返回值。 elif v == 2: res = num_1 - num_2 elif v == 3: res = num_1 * num_2 elif v == 4: res = num_1 / num_2 l1.config(text=res) # 5. 设置按钮提交计算 # 5.1 command 后面接的就是方法名。 b1 = tk.Button(root, text="提交计算", command=func) b1.grid(row=5, column=1, columnspan=2, pady=10) # 2.循环显示 根窗口 root.mainloop()
3 复选框按钮
3.1 Checkbutton组件
- 使用复选框,就需要Checkbutton复选框组件。
- 与Radionbutton很相似, 但是单选框只能选择一个,而多选框可以选择多个。
- 所以
Cheakbutton
需要都需要绑定一个变量。
3.2 将文字显示到窗口
-
能显示在窗口上的tkinter组件
Label
- 使用 pack()和gird()都是布局的意思.
- 使用pack()方法将button放置在主窗口root上,自动调整位置和大小
import tkinter as tk # 1.创建TK对象,作为主窗口 root root = tk.Tk() # 2.将文字显示到窗口上 lable1 = tk.Label(root, text="一张50 ,一张100,请选择你要哪张?") # 之前学习的布局方式。 # lable1.grid(row =0,column=1) # 自动调整位置和大小 lable1.pack() # 3. 创建绑定变量,用于存储选择框的状态 v_1 = tk.IntVar() # variable 是窗口状态,选择还是没选择 c1 = tk.Checkbutton(root, text="50$", variable=v_1) c1.pack(anchor="w") # 创建第二个窗口,变量绑定的状态。 v_2 = tk.IntVar() c2 = tk.Checkbutton(root, text="100$", variable=v_2) c2.pack(anchor="w") # 回调方法 def func(): #获取checkbox选择,状态 a = v_1.get() b = v_2.get() if a and b : l1.config(text="真聪明") elif a: l1.config(text="还有100$") elif b: l1.config(text="还有50$") else: l1.config(text="怎么滴,地上有钱也不要...") # 显示区域 l1 = tk.Label(root, text="请选择") l1.pack() # 按钮 b1 =tk.Button(root, text="确定", command=func) b1.pack() # 1.1 循环执行事件,等待窗口关闭发生 tk.mainloop()
-
anchor 属性用于指定部件在其父容器中的锚点位置。它可以用来控制部件在界面中的对齐方式。
- 通过指定
anchor
属性,可以将部件放置在所需的位置,使其对齐或停靠到指定的位置。 anchor
属性的可选值有:默认情况下,anchor
属性的值是’center’,表示部件在父容器中居中对齐。
'center':将部件的中心与其父容器的中心对齐。 'n':将部件的顶部边界与其父容器的顶部边界对齐。 's':将部件的底部边界与其父容器的底部边界对齐。 'e':将部件的右侧边界与其父容器的右侧边界对齐。 'w':将部件的左侧边界与其父容器的左侧边界对齐。 'nw':将部件的左上角与其父容器的左上角对齐。 'ne':将部件的右上角与其父容器的右上角对齐。 'sw':将部件的左下角与其父容器的左下角对齐。 'se':将部件的右下角与其父容器的右下角对齐。
- 通过指定
4. 河神捡到了你的斧头
-
河神发现你掉了一把斧头到水里?
import tkinter as tk # 1.创建TK对象,作为主窗口 root root = tk.Tk() # 2.将文字显示到窗口上 lable1 = tk.Label(root, text="少年啊! 你掉的是这个铁斧头,还是银斧头,还是这把金斧头?") # 之前学习的布局方式。 # lable1.grid(row =0,column=1) # 自动调整位置和大小 lable1.pack() # 3. 创建绑定变量,用于存储选择框的状态 v_1 = tk.IntVar() # variable 是窗口状态,选择还是没选择 c1 = tk.Checkbutton(root, text="铁斧头", variable=v_1) c1.pack(anchor="w") # 创建第二个窗口,变量绑定的状态。 v_2 = tk.IntVar() c2 = tk.Checkbutton(root, text="银斧头", variable=v_2) c2.pack(anchor="w") #趣味问答,添加一个checkbox v_3= tk.IntVar() c3 = tk.Checkbutton(root, text="金钥匙", variable=v_3) c3.pack(anchor="w") # 回调方法 def func(): #获取checkbox选择,状态 a = v_1.get() b = v_2.get() c = v_3.get() if a and b and c : l1.config(text="少年啊,你可真贪心啊") elif a : l1.config(text="好诚实的少你啊") elif b: l1.config(text="金斧头不考虑一下") elif c: l1.config(text="好聪明的少年啊!") else: l1.config(text="怎么什么都不要") # 显示区域 l1 = tk.Label(root, text="哪把斧头是你的?") l1.pack() # 按钮 b1 =tk.Button(root, text="确定", command=func) b1.pack() # 1.1 循环执行 tk.mainloop()