效果图:随即变红
代码如下 ,
# -*-coding:utf-8-*-
from PyQt5.QtWidgets import QApplication, QMainWindow
import PyQt5.QtWidgets as widgets
import sys
import random
import time
import math
from PyQt5.QtCore import QThread, pyqtSignal
class Cj(QMainWindow):
def __init__(self):
super().__init__()
self.__initUI__()
# self.grid_layout()
def __initUI__(self):
# 窗口大小
self.setGeometry(200, 200, 1000, 600)
self.setWindowTitle('抽奖')
# self.Left_Mid_layout = widgets.QHBoxLayout(self)
self.Left_Mid_layout1 = widgets.QGridLayout(self)
self.Left_Mid_widget = widgets.QWidget() # 创建部件
self.Left_Mid_widget.setLayout(self.Left_Mid_layout1)
# self.Left_Mid_layout.setSpacing(10)
self.button1 = []
# 根据自己的要求自己设置按钮上的字---这里很重要,这些字将会做为传递参数的依据
self.userList = ["龙狗", "凯哥", "欧总", "何总", "云儿", "长清", "老王", "茂茂", "茂茂"]
self.beginbutt = widgets.QPushButton(self)
self.beginbutt.setFixedSize(100, 50)
self.beginbutt.setStyleSheet(
'''QPushButton{background:white;border-radius:5px;}QPushButton:hover{background:red;}''')
self.beginbutt.setText("开始")
self.beginbuttend = widgets.QPushButton(self)
self.beginbuttend.setFixedSize(100, 50)
self.beginbuttend.setStyleSheet(
'''QPushButton{background:white;border-radius:5px;}QPushButton:hover{background:red;}''')
self.beginbuttend.setText("结束")
self.Left_Mid_layout1.addWidget(self.Left_Mid_widget, 0, 0, 12, 4)
self.Left_Mid_layout1.addWidget(self.beginbutt, 0, 0, 1, 1)
self.Left_Mid_layout1.addWidget(self.beginbuttend, 0, 1, 1, 1)
# 传达参数--重要,这里sender将接收你点击的字并传入函数
self.beginbutt.clicked.connect(lambda: self.slot_btn_start())
self.beginbuttend.clicked.connect(lambda: self.slot_btn_end())
Cols = 4
Rows = math.ceil(len(self.userList) / Cols)
self.XYList = []
for i in range(1, Rows + 1, 1):
for j in range(0, Cols, 1):
self.XYList.append([i, j])
print(self.XYList)
for x in range(0, len(self.userList), 1):
# 将数字j加进button
self.button1.append(x)
self.button1[x] = widgets.QPushButton(self)
self.button1[x].setFixedSize(50, 50)
self.button1[x].setStyleSheet(
'''QPushButton{background:white;border-radius:5px;}QPushButton:hover{background:red;}''')
# 此处将字放到按钮上
self.button1[x].setText(self.userList[x])
self.Left_Mid_layout1.addWidget(self.button1[x], self.XYList[x][0], self.XYList[x][1])
# # 传达参数--重要,这里sender将接收你点击的字并传入函数
# self.button1[x].clicked.connect(lambda: self.slot_btn_start())
# 因为我这使用的是QMainWindow,所以要创建一个Widget,才能显示所有的按钮
self.widget = widgets.QWidget()
self.widget.setLayout(self.Left_Mid_layout1)
self.setCentralWidget(self.widget)
# 开始
def slot_btn_start(self):
self.thread_1 = ThreadDemo(self.button1) # 初始化线程把 button1 按钮集合传到线程中
self.thread_1.trigger.connect(self.changeBGColor)
self.thread_1.start()
def changeBGColor(self, msg):
print(msg)
for x in self.button1:
x.setStyleSheet('''QPushButton{background:white;border-radius:5px;}QPushButton:hover{background:red;}''')
random.choice(self.button1).setStyleSheet(
'''QPushButton{background:red;border-radius:5px;}QPushButton:hover{background:red;}''')
# 结束
def slot_btn_end(self):
self.thread_1.disconnect()
# 线程类
class ThreadDemo(QThread):
trigger = pyqtSignal(str)
def __init__(self, buttons):
self.buttons = buttons
super(ThreadDemo, self).__init__()
def run(self):
bt_len = len(self.buttons)
print("传入的按钮长度为=", bt_len)
while True:
# print(i)
self.trigger.emit(str(random.randint(0, bt_len)))
time.sleep(0.1)
if __name__ == "__main__":
app = widgets.QApplication(sys.argv)
window = Cj()
window.show()
sys.exit(app.exec_())