天天看點

pyqt5寫一個抽獎程式(未美化)

今天閑來無事,用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_())