Python标准库和GUI综合练习实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
课程名称:Python编程基础与应用实验学期:2019年至2020年第1学期实验时间:2019年5 月10 日
专业:
班级:
学号:
姓名:
指导教师:
实践一python标准库和GUI综合练习
1.1实践:python标准库和GUI练习
1.1.1实验目的
1.熟练掌握python标准库中常用的库函数,理解它们的基本原理,会运用它们的常用
功能。

2.熟练运用python的thinkter包来构建GUI界面,掌握它的基本组件并学会运用它们。

1.1.2实验内容及步骤
1.分析问题
2.编写代码
3.运行程序
4.结果展示
1.1.3程序运行过程、方法和运行结果
1.使用tkinter来编写一个计算器小程序,实现+、-、*、\、\\等基本功能。

思路:
1).考虑用类来包裹整个计算器,用类的属性存储界面对象、数据与运算符等。

2).考虑使用eval()函数来执行一个字符串表达式,并返回表达式的值。

import tkinter as tk
# 先有整体框架,输入计算框,各种按键。

class App:
def __init__(self, master):
# 基本界面
self.master = master
# 输入组件
self.initWidgets()
# 表达式
self.hi = None
def initWidgets(self):
# 创建一个输入组件
self.show = bel(relief=tk.SUNKEN, width=23,
bg="white", anchor=tk.W)
# 对该输入组件使用pack布局
self.show.pack(side=tk.TOP, pady=10)
p = tk.Frame(self.master)
p.pack(side=tk.TOP)
# 定义字符串的元组
names = ("1", "2", "3", "4", "5", "6",
"7", "8", "9", "0", ".", "+", "-", "*", "**", "//", "/", "%", "=", "☭",)
# 遍历元组
for i in range(len(names)):
# 创建按钮,放入frame中
b = tk.Button(p, text=names[i], width=5)
b.grid(row=i//5, column=i % 5)
# b.pack(side=tk.LEFT, padx=0, pady=5)
# 为鼠标左键的单击事件绑定事件处理方法
b.bind("<Button-1>", self.click)
# 为鼠标左键双击事件绑定事件处理方法
if b["text"] == "☭":
b.bind("<Button-1>", self.clean)
# 定义一个记录输入数字次数的变量
self.i = 0
def click(self, event):
# 如果用户单击数字或点号
if (event.widget["text"] in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".")):
# 判断self.i是否为0,0的话清空show【”text“】的值
if self.i == 0:
self.show["text"] = ""
self.show["text"] = self.show["text"] + event.widget["text"]
self.i = self.i + 1
print(self.i)
# 如果用户单击了运算符
elif(event.widget["text"] in ("+", "-", "*", "/", "%", "**", "//")):
self.show["text"] = self.show["text"] + event.widget["text"]
elif(event.widget["text"] == "=" and self.show["text"] is not None):
# 赋值给self.hi
self.hi = self.show["text"]
# 调试时使用
print(self.hi)
# 使用eval()函数计算结果
self.show["text"] = str(eval(self.hi))
self.hi = None
self.i = 0
def clean(self, event):
# 点击恢复按钮时,清空表达式,计数器清空
self.hi = None
self.show["text"] = ""
root = ()
root.title("计算器")
App(root)
root.mainloop()
结果:
点击“=”后:
2.使用python的tkinter编写一个界面,例子如下:
能够通过xml标准库读写xml文件:country.xml中指定国家的rank和year属性。

country.xml结构如下:
<data>
<country name="Panama">
<rank>67</rank>
<year>20142</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data>
思路:将解析xml文件的代码封装为类,注意界面的布局情况,可以使用Label 和Entry等界面组件的grid函数。

import tkinter as tk
import xml.etree.ElementTree as ET
class App:
"""
点击get按钮时
根据用户输入的国家名判断是否时xml文件里面存在的name,若是则返回行营的rank和year值
点击set按钮时
将用户输入的数据按原格式存入xml文件
"""
def__init__(self,root):
#基本界面
self.root=root
#所需组件
self.zujian()
def zujian(self):
#用标签label存放固定的数据,用文本框entry存放可变数据,并用grid 固定他们的位置
#set和get用按钮button来创建,再用bind设置他们的响应机制
#国家name,
bel(self.root,text="country:",height=1,
width=10).grid(row=0,column=0)
self.e1=tk.StringVar()
self.e11=tk.Entry(self.root,width=50,textvariable=self.e1)
self.e11.grid(row=0,column=1)
#rank
bel(self.root,text="rank:",height=1,
width=10).grid(row=1,column=0)
self.e2=tk.IntVar()
self.e22=tk.Entry(self.root,width=50,textvariable=self.e2)
self.e22.grid(row=1,column=1)
#year
bel(self.root,text="year:",height=1,
width=10).grid(row=2,column=0)
self.e3=tk.IntVar()
self.e33=tk.Entry(self.root,width=50,textvariable=self.e3)
self.e33.grid(row=2,column=1)
#get
b=tk.Button(root,text="get",height=1,width=15)
b.grid(row=3,column=0)
b.bind("<Button-1>",self.click)
#set
c=tk.Button(root,text="set",height=1,width=15)
c.grid(row=3,column=1)
c.bind("<Button-1>",self.clean)
def click(self,event):
#点击get按钮的响应机制
tree=ET.parse('zuoye/country.xml')#创建xml树
root1=tree.getroot()#得到树根
for country in root1.findall('country'):#循环遍历子节点country
#判断name是否和用户输入的一致,若一致则输出他们的rank和year的值
if country.get('name')==self.e11.get():#子节点下属性name的值
self.e1.set(country.get('name'))
self.e2.set(country.find('rank').text)#子节点下节点rank的值
self.e3.set(country.find('year').text)
def clean(self,event):
#点击set按钮的响应机制
# 写入xml
tree=ET.parse('zuoye/country.xml')#创建xml树
root1=tree.getroot()#得到树根
#创建新的子节点
countrynew=ET.Element('country',{'name':self.e11.get()})
ranknew=ET.SubElement(countrynew,'rank')#子节点下节点rank
ranknew.text=self.e22.get()
yearnew=ET.SubElement(countrynew,'year')
yearnew.text=self.e33.get()
#向根节点添加新的子节点,可以使用append方法添加子节点
root1.append(countrynew)
#写入
tree.write('zuoye/country.xml',encoding="utf-8",xml_declaration= True)
root=()
root.title("XML")
App(root)
root.mainloop()
结果:
输入name后:
点击get后:
填入数据:
点击set后:
1.1.4实验中遇到的问题及分析、解决过程
1.1.4.1问题标题(如果有,请填写标题,没有则删除这小节,写“无”)
1. 问题描述
正文。

2. 问题分析
正文。

3. 解决方法
正文。

10。

相关文档
最新文档