Python---实验九作业

1,使用tkinter实现计算器程序。实现效果如下:

在这里插入图片描述

from tkinter import *
from tkinter.ttk import *def frame(master):"""将共同的属性作为默认值, 以简化Frame创建过程"""w = Frame(master)w.pack(side=TOP, expand=YES, fill=BOTH)return wdef button(master, text, command):"""提取共同的属性作为默认值, 使Button创建过程简化"""w = Button(master, text=text, command=command, width=6)w.pack(side=LEFT, expand=YES, fill=BOTH, padx=2, pady=2)return wdef back(text):"""将text最末的字符删除并返回"""if len(text) > 0:return text[:-1]else:return textdef calc(text):"""用eval方法计算表达式字符串"""try:if (sep_flag.get() == 0):return eval(del_sep(text))else:return add_sep(str(eval(del_sep(text))))except (SyntaxError, ZeroDivisionError, NameError):return 'Error'def add_sep(text):"""向参数传入的数字串中添加千位分隔符这里考虑了三种情况: 无整数部份, 无小数部份, 同时有整数和小数部份由于字符串是不可改变的, 这里由字符串生成列表以便执行insert操作和extend操作, 操作完成后最由列表生成字符串返回    """dot_index = text.find('.')if dot_index > 0:text_head = text[:dot_index]text_tail = text[dot_index:]elif dot_index < 0:text_head = texttext_tail = ''else:text_head = ''text_tail = textlist_ = [char for char in text_head]length = len(list_)tmp_index = 3while length - tmp_index > 0:list_.insert(length - tmp_index, ',')tmp_index += 3list_.extend(text_tail)new_text = ''for char in list_:new_text += charreturn new_textdef del_sep(text):"""删除数字串中所有的千位分隔符"""return text.replace(',', '')# 开始界面的实现
root = Tk()
root.title("Calculator") # 添加标题main_menu = Menu() # 创建最上层主菜单# 创建Calculator菜单, 并加入到主菜单
calc_menu = Menu(main_menu, tearoff=0)
calc_menu.add_command(label='Quit', command=lambda: exit())
main_menu.add_cascade(label='Calculator', menu=calc_menu)# 创建View菜单, 并加入到主菜单
# 其中"Show Thousands Separator"菜单项是一个Checkbutton
text = StringVar()
sep_flag = IntVar()
sep_flag.set(0)
view_menu = Menu(main_menu, tearoff=0)
view_menu.add_checkbutton(label='Show Thousands Separator', variable=sep_flag,command=lambda t=text: t.set(add_sep(t.get())))
main_menu.add_cascade(label='View', menu=view_menu)root['menu'] = main_menu # 将主菜单与root绑定# 创建文本框
Entry(root, textvariable=text).pack(expand=YES, fill=BOTH, padx=2, pady=4)style = Style()
style.configure('TButton', padding=3)# 创建第一行三个按钮
fedit = frame(root)
button(fedit, 'Backspace', lambda t=text: t.set(back(t.get())))
button(fedit, 'Clear', lambda t=text: t.set(''))
button(fedit, '±', lambda t=text: t.set('-('+t.get()+')'))# 每行四个, 创建其余四行按钮
for key in ('789/', '456*', '123-', '0.=+'):fsymb = frame(root)for char in key:if char == '=':button(fsymb, char, lambda t=text: t.set(calc(t.get())))else:button(fsymb, char, lambda t=text, c=char: t.set(t.get()+c))root.mainloop()

效果图如下:
在这里插入图片描述

2,安装pillow和qrcode库并编写程序:生成带有图标的二维码,图标为自己设置的照片,扫描后打开某个网站。(如平顶山学院的网站http://www.pdsu.edu.cn)

cmd --- pip install qrcode
在这里插入图片描述

import qrcode
from PIL import Image
import os,sys
def gen_qrcode(string,path,logo=""):qr=qrcode.QRCode(version=2,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=8,border=1)qr.add_data(string)qr.make(fit = True)img = qr.make_image()img = img.convert("RGBA")if logo and os.path.exists(logo):try:icon = Image.open(logo)img_w,img_h = img.sizeexcept Exception as e:print(e)sys.exit(1)factor = 4;size_w = int(img_w/factor)size_h = int(img_h/factor)icon_w,icon_h=icon.sizeif icon_w > size_w:icon_w = size_wif icon_h > size_h:icon_h = size_hicon =  icon.resize((icon_w,icon_h),Image.ANTIALIAS)w = int((img_w - icon_w)/2)h = int((img_h - icon_h)/2)icon = icon.convert("RGBA")img.paste(icon,(w,h),icon)img.save(path)#调用系统命令打开图片os.system("start %s" %path)if __name__ == "__main__":info = "http://www.pdsu.edu.cn"pic_path = "yanyu.png"     #必须生成png格式  这里是生成的二维码图片名称icon_path = "G:\TIM\图片\yy.jpg"    #可以是jpg,也可以是png  这里是中间图片的路径gen_qrcode(info,pic_path,icon_path)

效果图如下:
在这里插入图片描述

3,使用tkinter实现抽奖式提问程序。给出人抽奖人员名单,[‘张三’, ‘李四’, ‘王五’, ‘赵六’, ‘周七’, ‘钱八’],实现如下效果,点击开始,滚动姓名,开始抽奖,点击停,弹出中奖姓名。

import tkinter
import tkinter.messagebox
import random
import threading
import itertools
import time
root = tkinter.Tk()
#窗口标题
root.title('随机提问')
#窗口初始大小和位置
root.geometry('260x180+400+300')
#不允许改变窗口大小
root. resizable(False,False)#关闭程序时执行的函数代码,停止滚动显示学生名单
def closeWindow():root.flag = Falsetime.sleep(0.1)root.destroy()
root.protocol('WM_DELETE_WINDOW',closeWindow)
#模拟学生名单,可以加上数据库访问接口,从数据库中读取学生名单
students = ['张三','李四','王五','赵六','周七','钱八']
#变量,用来控制是否滚动显示学生名单root.flag = False
def switch():root.flag = True#随机打乱学生名单t = students[:]random.shuffle(t)t = itertools.cycle(t)while root.flag:#滚动显示lbFirst['text'] = lbSecond ['text']lbSecond['text'] = lbThird['text']lbThird['text'] = next(t)#数字可以修改,控制滚动速度time.sleep(0.1)def btnStartClick():#每次单击“开始”按钮启动新线程t = threading.Thread (target=switch)t.start()btnStart['state'] ='disabled'btnStop['state'] ='normal'
btnStart = tkinter.Button(root,text='开始',command=btnStartClick)
btnStart.place(x= 30,y=10,width=80,height=20)def btnStopClick():# 单击“停”按钮结束滚动显示root.flag = Falsetime.sleep(0.3)tkinter.messagebox.showinfo('恭喜','本次中奖:'+lbSecond['text'])btnStart['state'] ='norma1'btnStop['state'] ='disabled'
btnStop = tkinter.Button(root,text='停',command = btnStopClick)
btnStop['state'] ='disabled'
btnStop.place(x=150,y = 10,width =80,height = 20)# 用来滚动显示学生名单的3个Labe1组件
# 可以根据需要进行添加,但要修改上面的线程函数代码
lbFirst = tkinter.Label(root,text ='')
lbFirst.place(x=80,y = 60,width = 100,height = 20)
# 红色Label组件,表示中奖名单
lbSecond = tkinter.Label(root,text ='')
lbSecond['fg'] ='red'
lbSecond.place(x=80,y = 90,width = 100,height = 20)
lbThird =tkinter.Label(root,text = '' )
lbThird.place(x=80,y = 120, width = 100,height = 20)# 启动tkinter主程序
root.mainloop()

效果图如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分析FLV文件分析和解析器的开源代码

分析一下GitHub上一份FLV文件分析和解析器的开源代码 GitHub源码地址&#xff1a;功能强大的 FLV 文件分析和解析器 &#xff1a;可以将flv文件的视频tag中的h264类型数据和音频tag中的aac类型数据导出 &#xff08;只限h264和aac&#xff09; (这个代码不太适合用于大文件的分…

用pv操作描述如下前驱图_LinkedList实现分析(二)——常用操作

上一篇文章LinkedList实现分析(一)——LinkedList初探与对象创建介绍了LinkedList中的一些重要属性和构造方法&#xff0c;下面我们将详细介绍一下LinkedList提高的常用方法的实现原理元素添加###add(E e)方法往LinkedList添加元素&#xff0c;LinkedList提供了多重方式&#x…

C++多重继承与虚基类及与.NET的比较

多重继承前面我们介绍的派生类只有一个基类&#xff0c;称为单基派生或单一继承。在实际运用中&#xff0c;我们经常需要派生类同时具有多个基类&#xff0c;这种方法称为多基派生或多重继承。2.1 多重继承的声明&#xff1a;在 C 中&#xff0c;声明具有两个以上基类的派生类与…

Javascript的IE和Firefox兼容性汇编

window.event现有问题&#xff1a;使用 window.event 无法在 FF 上运行解决方法&#xff1a;FF 的 event 只能在事件发生的现场使用&#xff0c;此问题暂无法解决。可以这样变通&#xff1a;原代码(可在IE中运行)&#xff1a;<input type"button" name"someB…

Java Double类compareTo()方法与示例

双类compareTo()方法 (Double class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Double-object against the given Double-obje…

平院实训门禁系统导入

这是我的配置&#xff08;如果是Win10最好每一步都管理员身份运行&#xff09; win7 SQLServer2008 VS2012 切记&#xff1a;注意&#xff1a;当你SQLserver创建数据库和VS连接数据库的时候得用同一种方式&#xff0c;要么都用window&#xff08;主机名&#xff09;&#xff0…

ffmpeg 解码音频(aac、mp3)输出pcm文件

ffmpeg 解码音频&#xff08;aac、mp3&#xff09;输出pcm文件 播放pcm可以参考&#xff1a; ffplay -ar 48000 -ac 2 -f f32le out.pcm main.c #include <stdio.h> #include <stdlib.h> #include <string.h>#include <libavutil/frame.h> #include …

Jquery getJSON()

getJSON与aspx 准备工作 Customer类 public class Customer{public int Unid { get; set; }public string CustomerName { get; set; }public string Memo { get; set; }public string Other { get; set; }}&#xff08;一&#xff09;ashx Customer customer new Customer { …

北京中信银行总行地址_中信银行拉萨分行举行“存款保险标识”启用和存款保险条例宣传活动...

11月NOV中信银行拉萨分行举行“存款保险标识”启用和《存款保险条例》宣传活动揭牌启用仪式111月Jul根据人民银行和总行关于“存款保险标识”启用工作相关要求&#xff0c;分行行领导高度重视“存款保险标识”启用和《存款保险条例》宣传活动工作&#xff0c;按照统一工作部署、…

Java ClassLoader getPackage()方法与示例

ClassLoader类的getPackage()方法 (ClassLoader Class getPackage() method) getPackage() method is available in java.lang package. getPackage()方法在java.lang包中可用。 getPackage() method is used to return the package that has been defined in ClassLoader or t…

C---编写程序:求出1~1000之间能被7或12整除,但不能同时被二者整除的所有整数,将结果保存在数组中,要求程序数据的输入、计算和输出均使用函数实现。

编写程序&#xff1a;求出1~1000之间能被7或12整除&#xff0c;但不能同时被二者整除的所有整数&#xff0c;将结果保存在数组中&#xff0c;要求程序数据的输入、计算和输出均使用函数实现。 编程思路&#xff1a;分别编写函数input()、cal()、output()实现数据的输入、计算和…

报告称我国成最大移民输出国 将形成投资产业链(关注)

时代特有的现象&#xff0c;我们应该予以关注 “现在国内房价这么高&#xff0c;政策也看不清&#xff0c;还不如逢高卖掉之前买的几套房子&#xff0c;一两套房子的钱办个投资移民&#xff0c;趁还年轻&#xff0c;拿到绿卡后享受一下美国本国待遇的高等教育了。”广州&#x…

转整型_156.Ruby烘焙大理石豆沙吐司解锁大理石花纹整型

好看又好吃的大理石豆沙面包。红豆馅均匀分布在松软细腻的面包体里&#xff0c;手撕着吃&#xff0c;一层层的甜美与温柔&#xff5e;关于吐司面包&#xff0c;我公众号里写过白吐司(基础款牛奶吐司&#xff0c;超绵鲜奶油吐司)和全麦吐司(基础款50%全麦吐司&#xff0c;经典燕…

ffmpeg 解码视频(h264、mpeg2)输出yuv420p文件

ffmpeg 解码视频&#xff08;h264、mpeg2&#xff09;输出yuv420p文件 播放yuv可以参考&#xff1a;ffplay -pixel_format yuv420p -video_size 768x320 -framerate 25 out.yuv main.c #include <stdio.h> #include <stdlib.h> #include <string.h>#includ…

VS2010 快捷键 (空格显示 绿点, Tab 显示箭头)

VS2010 有用的快捷键 &#xff1a; Ctrl r, ctrl w, 切换空格示。 转载于:https://www.cnblogs.com/fengye87626/archive/2012/11/21/2780716.html

C---编写程序:实现一个随堂测试,能进行加减乘除运算。要求如下:(1)随机产生两个1~10的正整数,在屏幕上输出题目,如:5+3=?(2)学生输入答案,程序检查学生输入答案是否正确,若正确,

编写程序&#xff1a;实现一个随堂测试&#xff0c;能进行加减乘除运算。要求如下&#xff1a; 1&#xff09;随机产生两个1~10的正整数&#xff0c;在屏幕上输出题目&#xff0c;如&#xff1a;53&#xff1f; 2&#xff09;学生输入答案&#xff0c;程序检查学生输入答案是…

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 这两个box信息

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 这两个box信息 &#xff08;因为这两个box在音频trak和视频trak 下都有的&#xff0c;而且都有一个数组的值是比较绕的&#xff09; 目录&#xff1a;stts&#xff1a;记录时间戳的&#xff0c;每个s…

利用SQL注入2分钟入侵网站

说起流光、溯雪、乱刀&#xff0c;可以说是大名鼎鼎无人不知无人不晓&#xff0c;这些都是小榕哥的作品。每次一提起小榕哥来&#xff0c;我的崇拜景仰就如滔滔江水&#xff0c;连绵不绝~~~~&#xff08;又来了&#xff01;&#xff09; 让我们崇拜的小榕哥最新又发布了SQL注入…

pip安装deb_技术|如何在 Ubuntu 上安装 pip

pip 是一个命令行工具&#xff0c;允许你安装 Python 编写的软件包。 学习如何在 Ubuntu 上安装 pip 以及如何使用它来安装 Python 应用程序。有许多方法可以在 Ubuntu 上安装软件。 你可以从软件中心安装应用程序&#xff0c;也可以从下载的 DEB 文件、PPA(LCTT 译注&#xff…

assubclass_Java类class asSubclass()方法及示例

assubclass类类asSubclass()方法 (Class class asSubclass() method) asSubclass() method is available in java.lang package. asSubclass()方法在java.lang包中可用。 asSubclass() method casts this Class object to denote a subclass of the class denoted by the given…