1.实验目的

了解图形界面开发的基本要素;

了解图形界面工作的基本特点;

掌握Tkinter库的特点;

理解Tkinter库的工作方式和原理;

掌握Tkinter界面开发的基本要素;

掌握完整Tkinter界面程序开发能力;

2.原理

本实验以Python基本的GUI库Tkinter为基础,实现一个简易计数程序,要求能实现基本的四则运算,具备0错误提示,实现归零等操作。

Python提供了多个图形开发界面的库,几个常用的PythonGUI库包括Tkinter、wxPython、Jython、PyQt。Tkinter是python的标准GUI库。Python使用Tkinter可以快速的创建GUI应用程序。由于Tkinter是python的安装包中的,只要安装好python就能使用Tkinter库。它可以在大多数的Unix平台使用,也可以应用在windows和macintosh系统中,对于一些简单的界面,Tkinter可以应对自如。

创建一个GUI程序的基本步骤是:

(1) 导入Tkinter模块;

(2) 创建控件;

(3) 指定这个控件的master,指定这个控件属于哪一个主控对象;

(4) 告诉管理器有一个控件产生了。

Tkinter中的控件包括了按钮、标签、文本框、输入框等,在使用中它们有各自的属性和需要初始化的内容,使用时要根据相关文档进行调用。实验的流程图大致如下。

3.仪器

树莓派

4.实验步骤

(1)先用基础框架代码创建一个基础窗口,熟悉Tkinter的使用;

(2)逐步增加标签、按钮、图片等常见的组件,熟悉组件的使用;

(3)设计简单计算器的基本结构框架;

(4)创建简单计算器程序的界面;

(5)实现计算器的各个功能;

5.代码

'''

#########################################

* Title: 树莓派实验

* Name: 基于Tkinter的图形化编程实验

* Author: AJ

#########################################

'''

import time

from tkinter import *

import tkinter as tk

import tkinter.font as tkFont

from functools import partial

#偏函数(Partial function)是通过将一个函数的部分参数预先绑定为某些值,从而得到一个新的具有较少可变参数的函数。

import math

'''

* 函数名称:button_input(entry,argu):

* 功能:向文本框组件中插入数据

* 参数含义:

entry: 文本框组件

argu: 文本数据

'''

def button_input(entry,argu):

entry.insert(END,argu) #向文本框的尾部插入文本数据

'''

* 函数名称:Backspace(entry):

* 功能:撤销操作

* 参数含义:

entry: 文本框组件

'''

def Backspace(entry):

input_len=len(entry.get()) #获取文本框中内容的长度

entry.delete(input_len-1) #删除文本框内容中的最后一项

'''

* 函数名称:clear(entry):

* 功能:清空操作

* 参数含义:

entry: 文本框组件

'''

def clear(entry):

entry.delete(0,END) #清空文本框中的内容

'''

* 函数名称:get_result(entry):

* 功能:计算表达式

* 参数含义:

entry: 文本框组件

'''

def get_result(entry):

input=entry.get()

try:

out=eval(input.strip()) #调用eval函数,返回字符串表达式的计算结果

except: #如果异常,即无法计算

output=str('ERROR') #则输出“ERROR”

else:

output=str(out) #将计算结果以字符串形式存储

clear(entry) #清空文本框

entry.insert(END,output) #向文本框尾部插入计算结果

'''

* 函数名称:主函数

* 功能:绘制计算器界面,添加监听响应函数

* 参数含义:

'''

if __name__=='__main__':

window=tk.Tk() #创建tk窗口

window.title('简易计算器')

window.resizable(1,1) #设置自适应自配尺寸

entry_font=tkFont.Font(size=12) #设置文本框字体大小

entry=Entry(window,justify='right',font=entry_font) #创建文本框组件

entry.grid(row=0,column=0,columnspan=5,sticky=W+E+N+S,padx=5,pady=5) #放入相应位置

#更改按钮的默认设置

button_font=tkFont.Font(size=10,weight=tkFont.BOLD) #设置按钮组件的文本字体和大小

button_bg='#E5A0AE' #设置按钮的背景色

button_active_bg='#85535B' #设置按钮被按下时的背景色

myButton=partial(Button,window,bg=button_bg,padx=10,pady=3,activebackground=button_active_bg)

#用partial函数,将创建Button时的一些参数固定,变成新的Button组件构造函数myButton

button0=myButton(text='0 ',command=lambda:button_input(entry,'0')) #创建button0,对应“0”按钮,设置好相应的监听响应函数

button0.grid(row=4,column=0,pady=5,padx=5)

button00=myButton(text='00',command=lambda:button_input(entry,'00')) #创建button00,对应“00”按钮,设置好相应的监听响应函数

button00.grid(row=4,column=1,pady=5,padx=5)

button1=myButton(text='1 ',command=lambda:button_input(entry,'1')) #创建button1,对应“1”按钮,设置好相应的监听响应函数

button1.grid(row=3,column=0,pady=5,padx=5)

button2=myButton(text='2 ',command=lambda:button_input(entry,'2')) #创建button2,对应“2”按钮,设置好相应的监听响应函数

button2.grid(row=3,column=1,pady=5,padx=5)

button3=myButton(text='3 ',command=lambda:button_input(entry,'3')) #创建button3,对应“3”按钮,设置好相应的监听响应函数

button3.grid(row=3,column=2,pady=5,padx=5)

button4=myButton(text='4 ',command=lambda:button_input(entry,'4')) #创建button4,对应“4”按钮,设置好相应的监听响应函数

button4.grid(row=2,column=0,pady=5,padx=5)

button5=myButton(text='5 ',command=lambda:button_input(entry,'5')) #创建button5,对应“5”按钮,设置好相应的监听响应函数

button5.grid(row=2,column=1,pady=5,padx=5)

button6=myButton(text='6 ',command=lambda:button_input(entry,'6')) #创建button6,对应“6”按钮,设置好相应的监听响应函数

button6.grid(row=2,column=2,pady=5,padx=5)

button7=myButton(text='7 ',command=lambda:button_input(entry,'7')) #创建button7,对应“7”按钮,设置好相应的监听响应函数

button7.grid(row=1,column=0,pady=5,padx=5)

button8=myButton(text='8 ',command=lambda:button_input(entry,'8')) #创建button8,对应“8”按钮,设置好相应的监听响应函数

button8.grid(row=1,column=1,pady=5,padx=5)

button9=myButton(text='9 ',command=lambda:button_input(entry,'9')) #创建button9,对应“9”按钮,设置好相应的监听响应函数

button9.grid(row=1,column=2,pady=5,padx=5)

button10=myButton(text='+ ',command=lambda:button_input(entry,'+')) #创建button10,对应“+”按钮,设置好相应的监听响应函数

button10.grid(row=1,column=3,pady=5,padx=5)

button11=myButton(text='- ',command=lambda:button_input(entry,'-')) #创建button11,对应“-”按钮,设置好相应的监听响应函数

button11.grid(row=2,column=3,pady=5,padx=5)

button12=myButton(text='* ',command=lambda:button_input(entry,'*')) #创建button12,对应“*”按钮,设置好相应的监听响应函数

button12.grid(row=3,column=3,pady=5,padx=5)

button13=myButton(text='/ ',command=lambda:button_input(entry,'/')) #创建button13,对应“/”按钮,设置好相应的监听响应函数

button13.grid(row=4,column=3,pady=5,padx=5)

button14=myButton(text='. ',command=lambda:button_input(entry,'.')) #创建button14,对应“.”按钮,设置好相应的监听响应函数

button14.grid(row=4,column=2,pady=5,padx=5)

button15=myButton(text='B ',command=lambda:Backspace(entry)) #创建button15,对应“撤销”按钮,设置好相应的监听响应函数

button15.grid(row=1,column=4,pady=5,padx=5)

button16=myButton(text='CE',command=lambda:clear(entry)) #创建button16,对应“清零”按钮,设置好相应的监听响应函数

button16.grid(row=2,column=4,pady=5,padx=5)

button17=myButton(text='= ',command=lambda:get_result(entry)) #创建button17,对应“等于”按钮,设置好相应的监听响应函数

button17.grid(row=3,column=4,pady=5,padx=5)

button18=myButton(text='AC',command=lambda:clear(entry)) #创建button18,对应“清除”按钮,设置好相应的监听响应函数

button18.grid(row=4,column=4,pady=5,padx=5)

window.mainloop()

6.实验结果

(1)通过使用基础框架代码创建一个基础窗口,熟悉了Tkinter的使用,为后面的代码编写打下基础;

(2)通过相关语句,逐步增加标签、按钮、图片等常见的组件,熟悉了相关组件的使用;

(3)通过绘制程序的运行流程图,设计了简单计算器的基本结构框架;

(4)通过编写代码和调试,创建了简单计算器程序的界面;

(5)通过编写代码和调试,实现计算器的各个功能;

实验结果如下:

输入:2*2=

输出:4

结果正确;

输入:2*2=

输出:4

结果正确;

输入:9/0=

输出:ERROR

结果正确

输入:9/3=

输出:3

结果正确

7.备注

1.若要实现连续运算(运算结果继续参与运算),应该怎样设计?

已经在实验代码中实现连续运行。只要将运算结果重新更新到文本框中即可,这样下次输入加减乘除进行运算时,就是在前一个运算结果的基础上进行连续运算了。

试着总结GUI界面设计的通用思路和步骤。

通用思路:先用代码编写绘制出整体的一个界面,然后对其中的需要交互的组件,编写相应的监听响应函数,然后与各自的组件绑定在一起即可。

步骤:

(1) 创建tk窗口,设置相应参数;

(2) 创建需要的组件,然后再tk窗口中放置得当;

(3) 对有交互需求的组件,进行监听响应函数的编写;

(4) 将组件和对应的监听响应函数绑定起来;

(5) 父窗口循环显示;

树莓派计算器c语言,树莓派与Python实验9——Tkinter计算器实验相关推荐

  1. 树莓派 安装c语言,树莓派安装OSMC打造家庭影院

    OSMC是一款开源的操作系统,使用它可以将树莓派打造成一款全功能的家庭影院系统,它基于 Linux 构建,可在局域网和互联网构建媒体网站,同时该系统也是基于 Kodi 项目构建. 本篇文章主要包括OS ...

  2. 树莓派摄像头c语言,树莓派图像处理之摄像头安装+配置教程

    树莓派图像处理之摄像头安装+配置教程 本文简单讲讲树莓派如何安装摄像头,以及一些配置和简单使用 树莓派的主板上有一个专门为摄像头模块预留的接口:CSI(Camera Serial Interface) ...

  3. 德州仪器计算器 C语言编程,德州仪器因取消对计算器编程的支持而激怒业余爱好者...

    根据TI-Planet上发布的客户支持电子邮件(通过Linus Tech Tips),受影响的计算器包括流行的TI-84 Plus CE,以及TI-83 Plus CE-T和TI-83 Premium ...

  4. AVR单片机计算器C语言源程序,一个基于AVR单片机的计算器程序.doc

    一个基于AVR单片机的计算器程序 #include #include//延时函数的头文件 #include // 中断函数的头文件 #define uint unsigned int #define ...

  5. Python语言学习:Python语言学习之硬件交互应用(arduino、树莓派等)相关的简介、案例应用之详细攻略

    Python语言学习:Python语言学习之硬件交互应用(arduino.树莓派等)相关的简介.案例应用之详细攻略 目录 Python与硬件交互应用 1.适合运行python的嵌入式硬件系统 1.1. ...

  6. 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM

    01树莓派直接输出PWM波 -- 硬件PWM程序  (推荐使用) #include #include #include //必不可少 int main( void) { int pwm_gpio5 = ...

  7. 树莓派输出pwm波c语言,树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制

    树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制 树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制 一:pigpio库简介 pigpio是一个用于树莓派的库 ...

  8. Raspberry Pi 4B树莓派 |#入门教程02# 树莓派GPIO控制(Python、C)

    树莓派GPIO编号方式 功能物理引脚 从左到右,从上到下:左边奇数,右边偶数:1-40 通过打开终端窗口并运行命令,可以在Raspberry Pi上访问方便的参考pinout.该工具由GPIO零 Py ...

  9. 树莓派自启动python程序,远程树莓派桌面,重装树莓派系统,串口驱动,永不休眠,树莓派旋转屏幕方向,树莓派定时重启,修改矫正树莓派时间,raspbian Linux 系统命令常用

    一.树莓派4B自启python的脚本方法 1.rc.local文件修改 (1)新建运行脚本 pi@zero:~/raspberry $ sudo nano test.sh #!/bin/sh cd / ...

最新文章

  1. 如何做好网站项目需求分析?
  2. C语言并发执行的进程怎么写,多进程并发写文件 多进程并发售票 用c语言写
  3. 上海事业评中级职称还要考计算机,上海职称评审-事业单位如何评职称
  4. FreeRTOS源码分析与应用开发10:内存管理
  5. 一步步了解线程池之自定义-PriorityThreadPool
  6. 二进制颜色查询对照表
  7. 《东周列国志》第四十九回 公子鲍厚施买国 齐懿公竹池遇变
  8. 现在更新鸿蒙会成为小白鼠吗,猫和老鼠鸿蒙版下载-猫和老鼠网易官方手游鸿蒙版 v7.8.4-114手机乐园...
  9. 路径穿越(Path Traversal)详解
  10. 松下A6伺服速度控制模式
  11. Kinect-Fusion解读
  12. JAVA毕设项目医院病历管理系统(java+VUE+Mybatis+Maven+Mysql)
  13. Modbus对接 - Java
  14. blg-017-在中C++用全局对象的构造函数实现反射机制
  15. 手机克隆常见问题 安卓版手机便签怎么导出
  16. linux下更新Cmake,包括cmake下载缓慢解决方案
  17. Experiment 3. Stack and Queue
  18. python函数练习题详解_Python练习题详解之函数3(小白友好)
  19. 笔记本空格键没弹性了
  20. PS快捷键大全 所有快捷键都在这里 新手必备

热门文章

  1. php 图片印章_PHP制作中文圆形印章示例
  2. SQL语句查询拼音码
  3. 五折交叉验证/K折交叉验证, python代码到底怎么写
  4. DM数据库中数据字典表分类及常用查询。
  5. CPU的四个主要功能
  6. MySQL中 反引号、单引号 和 双引号 的区别
  7. IOT-OS之RT-Thread(六)--- 线程间同步与线程间通信
  8. cogs 448. 神牛果 神奇好理解的思路
  9. python画聚类树状图_影像组学学习笔记(36)-聚类树状图Dendrogram的python实现
  10. 超好用的图标搜索网站