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,一经查实,立即删除!

相关文章

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

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

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

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

平院实训门禁系统导入

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

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

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

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

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

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

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

分析一下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…

Python---爬虫案例

例1、爬取公众号文章中的图片。 1&#xff0c;首先打开要获取公众号文章的地址 2&#xff0c;按下F12&#xff0c;再按Ctrl Shift C&#xff0c;然后鼠标移动到图片位置&#xff0c;然后观察控制台中显示图片对应的代码位置 3&#xff0c;分析该位置的代码段 代码段如下&…

Python---实验九

1、使用标准库urllib爬取“http://news.pdsu.edu.cn/info/1005/31269.htm”平顶山学院新闻网上的图片&#xff0c;要求:保存到F盘pic目录中&#xff0c;文件名称命名规则为“本人姓名” “_图片编号”&#xff0c;如姓名为张三的第一张图片命名为“张三_1.jpg”。 from re imp…

32接上拉5v_51单片机P0口上拉电阻的选择

作为I/O口输出的时候时&#xff0c;输出低电平为0 输出高电平为高组态(并非5V&#xff0c;相当于悬空状态&#xff0c;也就是说P0 口不能真正的输出高电平)。给所接的负载提供电流&#xff0c;因此必须接(一电阻连接到VCC)&#xff0c;由电源通过这个上拉电阻给负载提供电流。P…

[转载]FPGA/CPLD重要设计思想及工程应用(时序及同步设计)

来源&#xff1a;http://www.eetop.cn/blog/html/11/317611-13412.html 数字电路中,时钟是整个电路最重要、最特殊的信号。 第一, 系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错. 第二, 时钟信号通常是系统…

实验五 图形设计

每复制一个方法都要绑定Paint事件 一、创建Windows窗体应用程序&#xff0c;要求如下&#xff1a;&#xff08;源代码运行界面&#xff0c;缺少任一项为0分&#xff0c;源代码只需粘贴绘制图形代码所在的方法&#xff0c;不用粘贴太多&#xff09; 例如: &#xff08;1&…

ADO.NET与SQL Server数据库的交互

7.3.1 使用SqlConnection对象连接数据库 例如&#xff1a;建立与SQL Server数据库的连接。 string connstring"Data Sourceservername;uidusername;pwdpassword;Initial Catalogdbname";SqlConnection connnew SqlConnection(connstring);conn.Open(); 例如&#xf…

linux ftp日志_linux学习笔记(一)——Linux分区和目录结构

linux学习笔记&#xff08;一&#xff09;——Linux分区和目录结构安装Linux时&#xff0c;手动挂载分区的情况下&#xff0c;/ 和 swap 是必须要挂载的&#xff0c;其他/home、/boot 等可以根据需要自行挂载。一般来说&#xff0c;简单的话&#xff0c;建议挂载三个分区&#…

vc++ 6.0 堆栈_在C ++中使用链接列表实现堆栈

vc 6.0 堆栈To implement a stack using a linked list, basically we need to implement the push() and pop() operations of a stack using linked list. 要使用链接列表实现堆栈 &#xff0c;基本上&#xff0c;我们需要使用链接列表实现堆栈的push()和pop()操作。 Exampl…

协议地址结构_TCP/IP 协议 讲解

计算机网络体系结构分层太厉害了&#xff0c;终于有人能把TCP/IP 协议讲的明明白白了计算机网络体系结构分层不难看出&#xff0c;TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”&#xff0c;而 TCP/IP 则更强调“在计算机上实现协议应该开…

28335接两个spi设备_IIC和SPI如此流行,谁才是嵌入式工程师的必备工具?

IICvs SPI现今&#xff0c;在低端数字通信应用领域&#xff0c;我们随处可见 IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是这两种通信协议非常适合近距离低速芯片间通信。Philips(for IIC)和 Motorola(for SPI) 出于不同背景和市场需求…

线性表15|魔术师发牌问题和拉丁方阵 - 数据结构和算法20

线性表15 : 魔术师发牌问题和拉丁方阵 让编程改变世界 Change the world by program 题外话 今天小甲鱼看到到微博有朋友在问&#xff0c;这个《数据结构和算法》系列课程有木有JAVA版本的&#xff1f; 因为这个问题之前也有一些朋友问过&#xff0c;所以咱在这里统一说下哈…

[ZT]Three ways to tell if a .NET Assembly is Strongly Named (or has Strong Name)

Here are several convenient ways to tell whether a .NET assembly is strongly named. (English language note: I assume the form “strongly named” is preferred over “strong named” since that’s the form used in the output of the sn.exe tool shown immediat…