最终效果
环境准备
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设计时选择自己喜欢的图片添加到资源文件夹即可