利用python+tkinter开发一个点名软件

最近上课学生多名字记不住,名册忘记了带,要点名怎么办,好久没有写代码了,于是自己写了个点名软件,记录下吧,第一次接触TK也不是太熟悉,写的不太好,记录下源代码 以后遇到要写桌面软件还是可以耍耍的。

tk:文档  https://wiki.python.org/moin/TkInter

tk是python 自带的一个GUI模块

效果:

背景图:

icon图标:

源码:

from win32com.client import Dispatch
from tkinter import *
import tkinter as tk
from PIL import Image
from PIL import ImageTk
import os
import re
import random
from threading import Thread
import pythoncom
import time

stu_path = "名单.txt"  # 学生名单路径

def speaker(str):
    """
    语音播报
    :param str: 需要播放语音的文字
    """
    speaker = Dispatch("SAPI.SpVoice")
    speaker.Speak(str)

class Rollllcall():
    def __init__(self):
        self.win = Tk()
        self.win.title("Python课堂点名器")
        self.win.iconbitmap("image/icon.ico")
        self.win.geometry("750x450")
        self.win.resizable(False, False)  # 不允许放大窗口,避免放大导致布局变形带来的麻烦
        self.start = False  # 开始按钮的状态
        # 增加背景图片
        img = Image.open(‘image/back.jpg‘)
        img = ImageTk.PhotoImage(img, size=(650, 450))
        theLabel = tk.Label(self.win,  # 绑定到一个框架
                            # justify=tk.LEFT,  # 对齐方式
                            image=img,  # 加入图片
                            compound=tk.CENTER,  # 关键:设置为背景图片
                            font=("华文行楷", 20),  # 字体和字号
                            fg="white",
                            )  # 前景色
        theLabel.place(x=0, y=0, relwidth=1, relheight=1)
        self.var = tk.StringVar()  # 储存文字的类
        self.var.set("别紧张")  # 设置文字
        NameLabel = tk.Label(self.win, textvariable=self.var,  # 绑定到一个框架
                             justify=tk.LEFT,  # 对齐方式
                             compound=tk.CENTER,  # 关键:设置为背景图片
                             font=("华文行楷", 35),  # 字体和字号
                             fg="SeaGreen",
                             width=10,
                             )  # 前景色
        NameLabel.place(x=280, y=100)

        # 多选框
        self.checkVar = IntVar()
        Checkbutton(self.win, text="语音播放", variable=self.checkVar,
                    onvalue=1, offvalue=0, height=0, width=0).place(x=170, y=410)
        tk.Button(self.win, text=‘编辑学生名单‘, height=0, width=0, command=self.pop_win).place(x=520, y=408)

        self.theButton = tk.Button(self.win, text="开始", font=("华文行楷", 13), fg="SeaGreen", width=20,
                                   command=self.callback)
        self.theButton.place(x=300, y=360)  # 调整按钮的位置
        self.win.mainloop()

    def save_names(self, pop, t):
        """
        保存名单内容
        :param win: #弹出窗
        :param t: 文本框对象

        """
        names = t.get(0.0, "end")
        if re.search(",", names):
            textlabel = tk.Label(pop, text="注意:名单不能使用中文逗号分隔", font=("华文行楷", 12),  # 字体和字号
                                 fg="red", )
            textlabel.place(y=190, x=10)
        else:
            with open(stu_path, "w", encoding="utf-8") as f:
                f.write(names)
            pop.destroy()

    # 编辑学生姓名
    def pop_win(self):
        pop = Tk(className=‘学生名单编辑‘)  # 弹出框框名
        pop.geometry(‘450x250‘)  # 设置弹出框的大小 w x h
        pop.iconbitmap("image/icon.ico")
        pop.resizable(False, False)

        # 用来编辑名单的文本框
        t = tk.Text(pop, width=61, height=‘10‘)
        t.place(x=10, y=10)
        # 判断文件存不存在
        result = os.path.exists(stu_path)
        if result:
            # 存在
            with open(stu_path, "r", encoding=‘utf-8‘) as f:
                names = f.read().strip("\n\r\t")
                t.insert("end", names)

        textlabel = tk.Label(pop, text="学生名单请以,(英文状态)的逗号分隔:\n如:刘亦菲,周迅", font=("华文行楷", 12),  # 字体和字号
                             fg="SeaGreen", )
        textlabel.place(y=150, x=10)

        # 点击确定保存数据
        tk.Button(pop, text=‘确定‘, height=0, width=0, command=lambda: self.save_names(pop, t)).place(y=200, x=340)
        tk.Button(pop, text=‘取消‘, height=0, width=0, command=pop.destroy).place(y=200, x=400)

    def callback(self):
        # 改变开始按钮的状态
        self.start = False if self.start else True
        # 开始随机名单之后修改按钮上的文字
        self.theButton["text"] = "就你了"
        # 开启一个子线程去做操作随机名字,以及语言播报
        self.t = Thread(target=self.mod_stu_name, args=(self.var, self.checkVar))
        self.t.start()

    def mod_stu_name(self, var, checkVar):
        # 随机读取名单中的一个
        pythoncom.CoInitialize()  # 子线程中调用win32com 语音播放需要设置这一行
        if not os.path.exists(stu_path):
            var.set("请添加名单")
            return None
        with open(stu_path, "r", encoding="utf-8") as f:
            names = f.read().strip("\n\t\r,")
        if not names:
            var.set("请添加名单")
            return None
        name_list = names.split(",")

        random_name = ""
        while self.start:
            random_name = random.choice(name_list)
            var.set(random_name)  # 设置名字随机出现
            time.sleep(0.1)
        self.theButton["text"] = "开始"  # 选中之后将按钮重新修改成 开始
        # 语音播报
        if checkVar.get() == 1:
            speaker(random_name)

if __name__ == ‘__main__‘:
    Rollllcall()

原文地址:https://www.cnblogs.com/huangguifeng/p/10962859.html

时间: 2024-08-28 20:52:09

利用python+tkinter开发一个点名软件的相关文章

利用python+tkinter做一个简单的智能电视遥控器

要通过python实现遥控器功能分两步: 第一步:开发图形化界面 第二步:使PC端给电视发送相应指令 现在就开始第一步操作实现遥控器功能,python2输入以下代码 注意:python3需要将代码中的from Tkinter import * 替换为from tkinter import * 将from SimpleDialog import * 替换为import tkinter.simpledialog #coding=utf-8from Tkinter import * from Simp

40多行python代码开发一个区块链。

40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为区块链目前还是不成熟的解决方案,但它无疑是计算机发展史上的一个奇迹.但是,到底区块链是什么呢? 区块链 区块链是一个公开的数字账本,它按时间顺序记录比特币或其他加密货币发生的交易. 更一般的讲,区块链是一个公共数据库,新的数据将存储在一个被称为"块"的容器中,然后块会被添加到一个不可篡改的

利用Python来写一个聊天工具!可能下个QQ或者微信会是你开发的?

用到的库 socket库 进群:548377875 即可获取数十套PDF哦! 先看代码! TCP服务端 TCP客户端 '电话'接通后对方就会开始'说话'(发送了消息),接收消息了recv是接收信息,1024这里需要解释一下,是接收的最大字节(接收到的内容为二进制).但是细心的读者可能发现了,用send发送的时候并没有设置发送的字节,其实可以更大,最大不要超过8K就可以了.下面解释这个怎么用才能更好. 接收消息了还需要发送信息.发送信息只需要用send就可以发了,但是需要发送二进制的内容. 另外一

python -Tkinter 实现一个小计算器功能

文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于python3.X  则需要将 tkinter 改为Tkinter    将tkMessagebox 改为messagebox即可 #-*- coding:utf-8 -*- from tkinter import * import tkMessageBox def get_Tk(): top = Tk() return top #定义求总和函数 def

如何开发一个手机软件跟女神表白?

我发现一个特点,就是很多搞技术开发的朋友们,都很实在,不会花言巧语勾引女的. 所以我今天特别给大家提供一个方式新颖且有创意的表白方式,把女神追到手. 那就是做一款表白的手机软件安装到女神的手机里,也不怕当面被拒绝而显得尬尴.关键是女神会觉得很酷很炫很高级. 下面是制作教程: 首先:把你想说的想要表达的而又说不出口的,统统都写进Word文档,记得要用Word文档写这份情书.可以配上女神的照片或者你们一起的照片.(选女神在朋友圈发过的) 其次:进入应用之星网站(http://www.appstar.

python+tkinter制作一个可自定义的动态时钟及详细解释,珍藏版

1.效果图 2.完整代码 #第1步:导出模块 from tkinter import * import math,time #第2步:定义窗口的相关设置 root = Tk() root.title("a DIY clock") #定义窗口名称 root.geometry("1020x800+500+0") #位置坐标=500,0=就是顶格向右水平移动500 root.configure(bg='pink') #定义窗口的背景颜色 #第3步:定义全局变量 globa

利用python Socket写一个类似FTP的脚本(只写了下载,上传和下载差不多就不多写了)

Socket的介绍就不多说了,网上都能搜到,直接说脚本,要实现FTP的功能要有服务器端和客户端, 服务器端: import SocketServer import commands import time class MySockServer(SocketServer.BaseRequestHandler):     def handle(self):         print "Got a new conn from", self.client_address         wh

项目实战_Python.利用Python+Flask编写一个高性能实时主动监控平台?

项目简介: 说明: 主要用于Redis实例集中化实时主动监控,后端采用Python+Flask实现,具体实现代码请阅读代码 项目思路: 项目结构: xmzoomeye-redis ├── app │   ├── conf │   │   ├── config.py │   │   ├── config.pyc │   │   ├── __init__.py │   │   ├── __init__.pyc │   │   └── rdsdata.db │   ├── __init__.py │ 

利用python BaseHTTPServer 开发的图片浏览小工具

最近从网上爬了点图片,为了方便浏览就写了这么个小工具.直接上码,解释偏少,代码没有优化,实现比较简略.仅作记录之用. 1.httpd.py 1 # encoding: UTF-8 2 #-*-coding:utf-8-*- 3 import BaseHTTPServer 4 import config 5 import urllib 6 from CreatHtml import CreateHtmlClass 7 import os 8 9 #登录页面代码,做个简单的访问权限控制 10 log