今天閑來無事,用python寫了一個抽獎程式
pyqt版本:pyqt5
python版本:3.6.6
下面直接上代碼,有建議的話,歡迎大家交流評論!
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Lucky_draw.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# 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
from PyQt5.QtWidgets import (QMainWindow, QApplication,QLabel,QLineEdit,QMessageBox,QComboBox)
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtCore import Qt, QThread, pyqtSignal
import sys
import random
import time
tester = ["發", "我", "人", "他", "去", "個", "給", "如", "吃", "分"]
class Ui_Lucky_draw(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(658, 526)
self.horizontalLayoutWidget = QtWidgets.QWidget(Dialog)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(9, 9, 641, 401))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.textEdit_2 = QtWidgets.QTextEdit(self.horizontalLayoutWidget)
self.textEdit_2.setEnabled(False)
self.textEdit_2.setObjectName("textEdit_2")
self.horizontalLayout.addWidget(self.textEdit_2)
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.textEdit = QtWidgets.QTextEdit(self.horizontalLayoutWidget)
self.textEdit.setEnabled(False)
self.textEdit.setObjectName("textEdit")
self.horizontalLayout.addWidget(self.textEdit)
self.verticalLayoutWidget = QtWidgets.QWidget(Dialog)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 430, 641, 91))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
qssStyle = '''
QPushButton{background-color:orange}
'''
# 加載設定好的樣式
self.verticalLayoutWidget.setStyleSheet(qssStyle)
self.font = QtGui.QFont()
self.font.setFamily("Arial") # 括号裡可以設定成自己想要的其它字型
self.font.setPointSize(20) # 括号裡的數字可以設定成自己想要的字型大小
self.textEdit.setFont(self.font)
self.textEdit_2.setFont(self.font)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "歡樂大抽獎"))
self.label.setText(_translate("Dialog", "-》"))
self.pushButton.setText(_translate("Dialog", "開始遊戲"))
self.pushButton.clicked.connect(self.test)
#self.textEdit.setPlaceholderText("大獎究竟花落誰家,敬請期待!!!")
self.pushButton_2.setText(_translate("Dialog", "抽獎結束"))
self.pushButton_2.clicked.connect(self.jump_to_success)
def test(self):
thread_conut = 0
self.my_thread = MyThread() # 執行個體化線程對象
self.my_thread.my_signal.connect(self.set_label_func)
self.my_thread.is_on = True
self.my_thread.start() # 啟動線程
self.pushButton.setEnabled(False)
self.textEdit.setText("大獎究竟花落誰家,敬請期待!!!")
# 線程自定義信号連接配接的槽函數
def set_label_func(self, num):
global tester
self.textEdit_2.setPlainText(num)
# 由于自定義信号時自動傳遞一個字元串參數,是以在這個槽函數中要接受一個參數
def jump_to_success(self):
#tester = ["發", "我", "人", "他", "去", "個", "給", "如", "吃", "分"]
t = random.randint(0, 9)
print(random.randint(0, 9))
print('選中的幸運兒是:', tester[t], '新年快樂!')
self.textEdit.setText('選中的幸運兒是:'+ tester[t]+' 新年快樂!')
self.textEdit_2.setPlainText(tester[t])
self.my_thread.is_on = False
self.my_thread.count = 0
self.pushButton.setEnabled(True)
# 線程類
class MyThread(QThread):
# 自定義信号對象。參數str就代表這個信号可以傳一個字元串
my_signal = pyqtSignal(str)
def __init__(self):
super(MyThread, self).__init__()
self.count = 0
self.is_on = True
def run(self): #線程執行函數
global tester
while self.count < (len(tester)):
while self.is_on:
print('次數',self.count+1)
self.my_signal.emit(str(tester[self.count])) #釋放自定義的信号
self.count = random.randint(0, 9)
#通過自定義信号把str(self.count)傳遞給槽函數
self.sleep(1) #本線程睡眠n秒【是QThread函數】
if __name__ == "__main__":
app = QApplication(sys.argv)
form = QtWidgets.QWidget()
window = Ui_Lucky_draw()
window.setupUi(form)
form.show()
sys.exit(app.exec_())