使用pyqt5 制作一个简易的点名工具

使用pyqt制作一个简易的点名工具

最终效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

环境准备

1.使用pycharm作为开发工具。
2.安装pyqt库->自行检索教程完成。

pip3 install PyQt5

3.配置qt工具->自行检索教程完成。

在这里插入图片描述
在这里插入图片描述

UI设计

在这里插入图片描述

代码实现

将保存的qrc文件和使用工具转换为python脚本
在这里插入图片描述
在这里插入图片描述
主函数

from PyQt5.QtGui import QIcon
import dianming
import sys
import time
import random
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox

FILENAME = ()
click = 0
my_thread = ''

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = QMainWindow()
    win.setWindowIcon(QIcon(':/image/src/logo.ico'))
    dianmingUI = dianming.Ui_MainWindow()
    dianmingUI.setupUi(win)
    dianmingUI.widget_2.hide()

    # 切换功能界面的方法
    def changewidget():
        dianmingUI.widget_2.hide()
        dianmingUI.widget.show()
    def changewidget2():
        dianmingUI.widget.hide()
        dianmingUI.widget_2.show()
    dianmingUI.bt_click.clicked.connect(changewidget)
    dianmingUI.bt_seting.clicked.connect(changewidget2)



    # 选择点名文件的方法
    def filefind():
        global FILENAME
        filename = QFileDialog.getOpenFileName(None, "选择文件", "/", "Text Files (*.txt)")
        FILENAME = filename
        print("获取到的文件名:",filename)
        dianmingUI.label_file.setText(filename[0])
        with open(filename[0],encoding = "utf-8") as f:
            filebody = f.read()
            f.close()
        dianmingUI.textEdit.setText(filebody)

    def filesave():
        global FILENAME
        #判断是否是自己编辑的点名文件
        print("文本内容:",dianmingUI.label_file.text())
        if dianmingUI.label_file.text() == '':
            filename = QFileDialog.getSaveFileName(None,"设置路径", "/", "Text Files (*.txt)")
            print("保存路径:",filename)
            with open(filename[0],'w',encoding = "utf-8") as f:
                f.write(dianmingUI.textEdit.toPlainText())
                print("写入的文本:",dianmingUI.textEdit.toPlainText())
        #否则直接保存覆盖
        else:
            print('保存路径:',FILENAME)
            with open(FILENAME[0],'w',encoding = "utf-8") as f:
                f.write(dianmingUI.textEdit.toPlainText())
                print("写入的文本:", dianmingUI.textEdit.toPlainText())
    dianmingUI.file_query.clicked.connect(filefind)
    dianmingUI.pushButton.clicked.connect(filesave)

    # def choose_sequence():
    #     global flag
    #     print("执行顺序点名")
    #     name = dianmingUI.textEdit.toPlainText()
    #     namelist = name.split('\n')
    #     print('点名列表:',namelist)
    #     while True:
    #         for i in namelist:
    #             time.sleep(0.05)
    #             dianmingUI.label_name.setText(i)
    #             if flag == 1:
    #                 flag = 0
    #                 break

    # def choose_random():
    #     global flag
    #     print("执行随机点名")
    #     name = dianmingUI.textEdit.toPlainText()
    #     namelist = name.split('\n')
    #     print('点名列表:', namelist)
    #     while flag:
    #         print("麻了")
    #         time.sleep(0.05)
    #         for i in namelist:
    #             dianmingUI.label_name.setText(i)
    #             if flag == 1:
    #                 flag == 0
    #                 break

    class Choose_thread(QThread):
        my_signal = pyqtSignal(str)
        def __init__(self):
            super(Choose_thread,self).__init__()
            self.flag = True
            self.breaknum = True
        def run(self):
                self.name = dianmingUI.textEdit.toPlainText()
                self.namelist = self.name.split('\n')
                print('点名列表:', self.namelist)
                self.ran_len = len(self.namelist)
                print("点名列表长度:", self.ran_len)
                if dianmingUI.radio_1.isChecked():
                    print("执行顺序点名")
                    while True:
                        for i in self.namelist:
                            time.sleep(0.05)
                            if self.flag:
                               self.my_signal.emit(str(i))
                            else:
                                break
                        if not self.breaknum:
                            break

                elif dianmingUI.radio_2.isChecked():
                    print("执行随机点名")
                    while True:
                        time.sleep(0.02)
                        if self.flag:
                           self.my_signal.emit(str(self.namelist[random.randint(0, self.ran_len - 1)]))
                        else:
                            break

        def stop(self):
            self.flag = False
            self.breaknum = False

    # class Choose_random(QThread):
    #     my_signal2 = pyqtSignal(str)
    #     def __init__(self):
    #         super(Choose_random, self).__init__()
    #         self.flag = True
    #     def run(self):
    #         print("执行随机点名")
    #         self.name = dianmingUI.textEdit.toPlainText()
    #         self.namelist = self.name.split('\n')
    #         print('点名列表:', self.namelist)
    #         self.ran_len = len(self.namelist)
    #         print("点名列表长度:",self.ran_len)
    #         while True:
    #             time.sleep(0.05)
    #             if self.flag == False:
    #                 break
    #             self.my_signal2 = self.namelist[random.randint(0,self.ran_len-1)]

    def setlabel(num):
        dianmingUI.label_name.setText("  "+num)

    def run():
        global click
        global my_thread
        if 0 == click:
            if dianmingUI.radio_2.isChecked() or dianmingUI.radio_1.isChecked():
                if len(dianmingUI.textEdit.toPlainText().split("\n"))>1:
                    my_thread = Choose_thread()
                    my_thread.start()
                    my_thread.my_signal.connect(setlabel)
                    click = click+1
            elif len(dianmingUI.textEdit.toPlainText().split("\n"))<=1:
                dianmingUI.label_name.setText(" 无内容")
                click = 0
            else:
                dianmingUI.label_name.setText("请先确认选项")
                click = 0
            # else:
            #     QMessageBox.about(None, "提示", "您暂未选择点名方式!")
            #     click = 0
        elif 1 == click and my_thread.flag == True:
            my_thread.stop()
            click = 0
            print("选中!:",dianmingUI.label_name.text())



    dianmingUI.bt_random.clicked.connect(run)
    win.show()
    sys.exit(app.exec_())



自动生成的uipython脚本

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'dianming.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5 import QtCore, QtGui, QtWidgets
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(821, 725)
        MainWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        MainWindow.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_back = QtWidgets.QLabel(self.centralwidget)
        self.label_back.setGeometry(QtCore.QRect(40, 40, 731, 631))
        self.label_back.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-radius:20px;")
        self.label_back.setText("")
        self.label_back.setObjectName("label_back")
        self.bt_close = QtWidgets.QPushButton(self.centralwidget)
        self.bt_close.setGeometry(QtCore.QRect(720, 50, 41, 28))
        self.bt_close.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.bt_close.setStyleSheet("#bt_close{\n"
"border:none;\n"
"}\n"
"#bt_close:hover{\n"
"    border-radius:10px;\n"
"    background-color: rgb(255, 0, 4);\n"
"}")
        self.bt_close.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/image/src/bt_close.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.bt_close.setIcon(icon)
        self.bt_close.setObjectName("bt_close")
        self.bt_mini = QtWidgets.QPushButton(self.centralwidget)
        self.bt_mini.setGeometry(QtCore.QRect(670, 50, 41, 28))
        self.bt_mini.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.bt_mini.setStyleSheet("#bt_mini{\n"
"border:none;\n"
"}\n"
"#bt_mini:hover{\n"
"    border-radius:10px;\n"
"    background-color: rgb(255, 0, 4);\n"
"}")
        self.bt_mini.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/image/src/bt_mini.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.bt_mini.setIcon(icon1)
        self.bt_mini.setObjectName("bt_mini")
        self.label_left = QtWidgets.QLabel(self.centralwidget)
        self.label_left.setGeometry(QtCore.QRect(40, 40, 111, 631))
        self.label_left.setStyleSheet("background-color: rgb(98, 98, 255);\n"
"border-top-left-radius:20px;\n"
"border-bottom-left-radius:20px;")
        self.label_left.setText("")
        self.label_left.setObjectName("label_left")
        self.bt_click = QtWidgets.QPushButton(self.centralwidget)
        self.bt_click.setGeometry(QtCore.QRect(40, 250, 111, 61))
        self.bt_click.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.bt_click.setStyleSheet("#bt_click{\n"
"    background-color: rgb(255, 255, 255,0);\n"
"}\n"
"#bt_click:hover{\n"
"    border:none;\n"
"    background-color: rgb(72, 72, 188);\n"
"}\n"
"")
        self.bt_click.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/image/src/bt_click_w.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.bt_click.setIcon(icon2)
        self.bt_click.setIconSize(QtCore.QSize(50, 50))
        self.bt_click.setObjectName("bt_click")
        self.bt_seting = QtWidgets.QPushButton(self.centralwidget)
        self.bt_seting.setGeometry(QtCore.QRect(40, 370, 111, 61))
        self.bt_seting.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.bt_seting.setStyleSheet("#bt_seting{\n"
"    background-color: rgb(255, 255, 255,0);\n"
"}\n"
"#bt_seting:hover{\n"
"    border:none;\n"
"    background-color: rgb(72, 72, 188);\n"
"}\n"
"")
        self.bt_seting.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/image/src/bt_seting.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.bt_seting.setIcon(icon3)
        self.bt_seting.setIconSize(QtCore.QSize(50, 50))
        self.bt_seting.setObjectName("bt_seting")
        self.label_name_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_name_2.setGeometry(QtCore.QRect(160, 50, 151, 16))
        self.label_name_2.setStyleSheet("color:rgb(98,98,255);")
        self.label_name_2.setObjectName("label_name_2")
        self.label_logo = QtWidgets.QLabel(self.centralwidget)
        self.label_logo.setGeometry(QtCore.QRect(70, 60, 51, 51))
        self.label_logo.setStyleSheet("border-image: url(:/image/src/logo.png);\n"
"border-radius:20px;")
        self.label_logo.setText("")
        self.label_logo.setObjectName("label_logo")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(170, 90, 571, 561))
        self.widget.setObjectName("widget")
        self.label_name = QtWidgets.QLabel(self.widget)
        self.label_name.setGeometry(QtCore.QRect(70, 120, 411, 71))
        self.label_name.setStyleSheet("color: rgb(98, 98, 255);\n"
"font-size:70px;\n"
"background-color: rgb(120, 129, 255,50);\n"
"border-radius:20px;\n"
"")
        self.label_name.setObjectName("label_name")
        self.radio_2 = QtWidgets.QRadioButton(self.widget)
        self.radio_2.setGeometry(QtCore.QRect(340, 280, 121, 31))
        self.radio_2.setStyleSheet("color: rgb(98, 98, 255);\n"
"font-size:20px;")
        self.radio_2.setObjectName("radio_2")
        self.radio_1 = QtWidgets.QRadioButton(self.widget)
        self.radio_1.setGeometry(QtCore.QRect(90, 280, 121, 31))
        self.radio_1.setStyleSheet("color: rgb(98, 98, 255);\n"
"font-size:20px;")
        self.radio_1.setObjectName("radio_1")
        self.bt_random = QtWidgets.QPushButton(self.widget)
        self.bt_random.setGeometry(QtCore.QRect(220, 390, 93, 81))
        self.bt_random.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap(":/image/src/random.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.bt_random.setIcon(icon4)
        self.bt_random.setIconSize(QtCore.QSize(80, 80))
        self.bt_random.setObjectName("bt_random")
        self.widget_2 = QtWidgets.QWidget(self.centralwidget)
        self.widget_2.setGeometry(QtCore.QRect(170, 80, 571, 561))
        self.widget_2.setObjectName("widget_2")
        self.textEdit = QtWidgets.QTextEdit(self.widget_2)
        self.textEdit.setGeometry(QtCore.QRect(60, 100, 441, 331))
        self.textEdit.setStyleSheet("color: rgb(98, 98, 255);\n"
"font-size:70px;\n"
"background-color: rgb(120, 129, 255,50);\n"
"border-radius:20px;\n"
"font-size:20px;")
        self.textEdit.setObjectName("textEdit")
        self.file_query = QtWidgets.QToolButton(self.widget_2)
        self.file_query.setGeometry(QtCore.QRect(250, 50, 47, 21))
        self.file_query.setObjectName("file_query")
        self.label_file = QtWidgets.QLineEdit(self.widget_2)
        self.label_file.setGeometry(QtCore.QRect(60, 50, 181, 21))
        self.label_file.setStyleSheet("border-radius:10px;\n"
"color: rgb(98, 98, 255);\n"
"background-color: rgb(120, 129, 255,50);\n"
"border-radius:20px;\n"
"\n"
"")
        self.label_file.setObjectName("label_file")
        self.pushButton = QtWidgets.QPushButton(self.widget_2)
        self.pushButton.setGeometry(QtCore.QRect(412, 450, 81, 71))
        self.pushButton.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap(":/image/src/confirm.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton.setIcon(icon5)
        self.pushButton.setIconSize(QtCore.QSize(50, 50))
        self.pushButton.setObjectName("pushButton")
        self.label_tip1 = QtWidgets.QLabel(self.widget_2)
        self.label_tip1.setGeometry(QtCore.QRect(70, 460, 231, 31))
        self.label_tip1.setObjectName("label_tip1")
        self.label_tip2 = QtWidgets.QLabel(self.widget_2)
        self.label_tip2.setGeometry(QtCore.QRect(110, 490, 141, 16))
        self.label_tip2.setObjectName("label_tip2")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        self.bt_close.clicked.connect(MainWindow.close)
        self.bt_mini.clicked.connect(MainWindow.showMinimized)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "点名工具 v1.0"))
        self.label_name_2.setText(_translate("MainWindow", "点名工具 v1.0"))
        self.label_name.setText(_translate("MainWindow", "▓▓▓▓▓▓▓"))
        self.radio_2.setText(_translate("MainWindow", "随机点名"))
        self.radio_1.setText(_translate("MainWindow", "顺序点名"))
        self.file_query.setText(_translate("MainWindow", "..."))
        self.label_file.setPlaceholderText(_translate("MainWindow", " 选择点名文件"))
        self.label_tip1.setText(_translate("MainWindow", "注意:点名使用数据为文本文件,"))
        self.label_tip2.setText(_translate("MainWindow", "一个姓名占据一行。"))

import qtsrc_rc

自动生成的资源文件脚本

略 ui设计时选择自己喜欢的图片添加到资源文件夹即可
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值