Как сделать небольшую паузу между ходом бота и ходом игрока?

Пишу крестики-нолики на PyQt5. Решил написать бота, который будет ходить на рандомную позицию.

Столкнулся с проблемой: Когда ходит игрок, то бот ходит мгновенно с игроком.

Пытался создать тайминг между ходами путем time.sleep(), а при ходе игрока принудительно вызвать self.show(), но почему-то главное окно не обновляется.

Помогите сделать паузу между ходом бота и игрока.


import sys
from PyQt5.QtWidgets import (QPushButton,QWidget, QHBoxLayout, QLabel, QApplication, QFileDialog)
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5 import QtCore, Qt
import random, time
class Example (QWidget):
    def __init__(self):
        self.count = 0
        self.first_team, self.second_team = 0, 0
        self.array = [[0,0,0],[0,0,0],[0,0,0]]
        self.reset = False
        self.enable = False
        self.last_numbers = [1,2,3,4,5,6,7,8,9]
        super ().__init__()
        self.initUI ()

    def initUI(self):
        self.button00 = QPushButton(self)
        self.button00.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button00.setGeometry(90,90,140,140)

        self.button01 = QPushButton(self)
        self.button01.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button01.setGeometry(230, 90, 140, 140)

        self.button02 = QPushButton(self)
        self.button02.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button02.setGeometry(370, 90, 140, 140)

        self.button10 = QPushButton(self)
        self.button10.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button10.setGeometry(90, 230, 140, 140)

        self.button11 = QPushButton(self)
        self.button11.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button11.setGeometry(230, 230, 140, 140)

        self.button12 = QPushButton(self)
        self.button12.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button12.setGeometry(370, 230, 140, 140)

        self.button20 = QPushButton(self)
        self.button20.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button20.setGeometry(90, 370, 140, 140)

        self.button21 = QPushButton(self)
        self.button21.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button21.setGeometry(230, 370, 140, 140)

        self.button22 = QPushButton(self)
        self.button22.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button22.setGeometry(370, 370, 140, 140)

        self.label00 = QLabel(self)
        self.label01 = QLabel(self)
        self.label02 = QLabel(self)
        self.label10 = QLabel(self)
        self.label11 = QLabel(self)
        self.label12 = QLabel(self)
        self.label20 = QLabel(self)
        self.label21 = QLabel(self)
        self.label22 = QLabel(self)

        self.prev_label00 = QLabel(self)
        self.prev_label00.setGeometry(515, 5, 20,20)

        self.prev_label01 = QLabel(self)
        self.prev_label01.setGeometry(535, 5, 20, 20)

        self.prev_label02 = QLabel(self)
        self.prev_label02.setGeometry(555, 5, 20, 20)

        self.prev_label10 = QLabel(self)
        self.prev_label10.setGeometry(515, 25, 20, 20)

        self.prev_label11 = QLabel(self)
        self.prev_label11.setGeometry(535, 25, 20, 20)

        self.prev_label12 = QLabel(self)
        self.prev_label12.setGeometry(555, 25, 20, 20)

        self.prev_label20 = QLabel(self)
        self.prev_label20.setGeometry(515, 45, 20, 20)

        self.prev_label21 = QLabel(self)
        self.prev_label21.setGeometry(535, 45, 20, 20)

        self.prev_label22 = QLabel(self)
        self.prev_label22.setGeometry(555, 45, 20, 20)



        self.result = QLabel(self)
        self.result.setText(f"{self.first_team} : {self.second_team}")
        self.result.setGeometry(10,10,72,40)
        self.result.setStyleSheet("background-color: rgb(255, 0, 0); \n"
                                  "font: 18pt \"OCR A Extended\";")

        self.resetButton = QPushButton(self)
        self.resetButton.setText("Сбросить счет")
        self.resetButton.setGeometry(120, 10, 200, 40)
        self.resetButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
                                       "font: 18pt \"OCR A Extended\";")

        self.botButton = QPushButton(self)
        self.botButton.setText("AI")
        self.botButton.setGeometry(350,10,140,40)
        self.botButton.setStyleSheet("background-color: rgb(255, 0, 0);\n"
                                     "font: 18pt \"OCR A Extended\";")

        self.setWindowIcon(QIcon("Tic_tac_toe.ico"))
        self.resize(600,600)
        self.move (300, 200)
        self.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.setWindowTitle ('Tic-Tac-Toe')
        self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)
        self.setFixedSize(self.size())
        self.show ()

    def action(self):
        self.button00.clicked.connect(lambda: self.turn(self.button00.geometry()))
        self.button01.clicked.connect(lambda: self.turn(self.button01.geometry()))
        self.button02.clicked.connect(lambda: self.turn(self.button02.geometry()))
        self.button10.clicked.connect(lambda: self.turn(self.button10.geometry()))
        self.button11.clicked.connect(lambda: self.turn(self.button11.geometry()))
        self.button12.clicked.connect(lambda: self.turn(self.button12.geometry()))
        self.button20.clicked.connect(lambda: self.turn(self.button20.geometry()))
        self.button21.clicked.connect(lambda: self.turn(self.button21.geometry()))
        self.button22.clicked.connect(lambda: self.turn(self.button22.geometry()))
        
        self.resetButton.clicked.connect(self.res)

        self.botButton.clicked.connect(self.startBot)

    def startBot(self):
        if self.enable == False:
            self.res()
            self.botButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
                                         "font: 18pt \"OCR A Extended\";")
            self.enable = True
            
        else:
            self.res()
            self.botButton.setStyleSheet("background-color: rgb(255, 0, 0); \n"
                                         "font: 18pt \"OCR A Extended\";")
            self.enable = False


    def turn(self, button_geometry):
        self.count+=1
        
        if self.enable == False:
            if self.count%2 == 1:
                if button_geometry == self.button00.geometry():
                    self.label00.setGeometry(button_geometry)
                    self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][0] = 1
    
                if button_geometry == self.button01.geometry():
                    self.label01.setGeometry(button_geometry)
                    self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][1] = 1
    
                if button_geometry == self.button02.geometry():
                    self.label02.setGeometry(button_geometry)
                    self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][2] = 1
    
                if button_geometry == self.button10.geometry():
                    self.label10.setGeometry(button_geometry)
                    self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][0] = 1
    
                if button_geometry == self.button11.geometry():
                    self.label11.setGeometry(button_geometry)
                    self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][1] = 1
    
                if button_geometry == self.button12.geometry():
                    self.label12.setGeometry(button_geometry)
                    self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][2] = 1
    
                if button_geometry == self.button20.geometry():
                    self.label20.setGeometry(button_geometry)
                    self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][0] = 1
    
                if button_geometry == self.button21.geometry():
                    self.label21.setGeometry(button_geometry)
                    self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][1] = 1
    
                if button_geometry == self.button22.geometry():
                    self.label22.setGeometry(button_geometry)
                    self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][2] = 1
    
            if self.count%2 == 0:
                if button_geometry == self.button00.geometry():
                    self.label00.setGeometry(button_geometry)
                    self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[0][0] = 2
    
                if button_geometry == self.button01.geometry():
                    self.label01.setGeometry(button_geometry)
                    self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[0][1] = 2
    
                if button_geometry == self.button02.geometry():
                    self.label02.setGeometry(button_geometry)
                    self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[0][2] = 2
    
                if button_geometry == self.button10.geometry():
                    self.label10.setGeometry(button_geometry)
                    self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[1][0] = 2
    
                if button_geometry == self.button11.geometry():
                    self.label11.setGeometry(button_geometry)
                    self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[1][1] = 2
    
                if button_geometry == self.button12.geometry():
                    self.label12.setGeometry(button_geometry)
                    self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[1][2] = 2
    
                if button_geometry == self.button20.geometry():
                    self.label20.setGeometry(button_geometry)
                    self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[2][0] = 2
    
                if button_geometry == self.button21.geometry():
                    self.label21.setGeometry(button_geometry)
                    self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[2][1] = 2
    
                if button_geometry == self.button22.geometry():
                    self.label22.setGeometry(button_geometry)
                    self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[2][2] = 2
                    
        if self.enable == True:
            if self.count % 2 == 1:
                if button_geometry == self.button00.geometry():
                    self.label00.setGeometry(button_geometry)
                    self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][0] = 1
                    self.last_numbers[0] = 10

                if button_geometry == self.button01.geometry():
                    self.label01.setGeometry(button_geometry)
                    self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][1] = 1
                    self.last_numbers[1] = 10
                    
                if button_geometry == self.button02.geometry():
                    self.label02.setGeometry(button_geometry)
                    self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][2] = 1
                    self.last_numbers[2] = 10
                    
                if button_geometry == self.button10.geometry():
                    self.label10.setGeometry(button_geometry)
                    self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][0] = 1
                    self.last_numbers[3] = 10

                if button_geometry == self.button11.geometry():
                    self.label11.setGeometry(button_geometry)
                    self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][1] = 1
                    self.last_numbers[4] = 10

                if button_geometry == self.button12.geometry():
                    self.label12.setGeometry(button_geometry)
                    self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][2] = 1
                    self.last_numbers[5] = 10

                if button_geometry == self.button20.geometry():
                    self.label20.setGeometry(button_geometry)
                    self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][0] = 1
                    self.last_numbers[6] = 10

                if button_geometry == self.button21.geometry():
                    self.label21.setGeometry(button_geometry)
                    self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][1] = 1
                    self.last_numbers[7] = 10
                    
                if button_geometry == self.button22.geometry():
                    self.label22.setGeometry(button_geometry)
                    self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][2] = 1
                    self.last_numbers[8] = 10
                    
                self.new_games()
                self.count+=1
                
            if self.count % 2 == 0:
                while True:
                    random_turn = random.randint(0,len(self.last_numbers)-1)
                    x = self.last_numbers[random_turn]

                    if x < 10:
                        if x == 1:
                            self.label00.setGeometry(90,90,140,140)
                            self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[0][0] = 2
                            self.last_numbers[0] = 10
                            
                        if x == 2:
                            self.label01.setGeometry(230, 90, 140, 140)
                            self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[0][1] = 2
                            self.last_numbers[1] = 10
                            
                        if x == 3:
                            self.label02.setGeometry(370, 90, 140, 140)
                            self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[0][2] = 2
                            self.last_numbers[2] = 10
                            
                        if x == 4:
                            self.label10.setGeometry(90, 230, 140, 140)
                            self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[1][0] = 2
                            self.last_numbers[3] = 10
                            
                        if x == 5:
                            self.label11.setGeometry(230, 230, 140, 140)
                            self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[1][1] = 2
                            self.last_numbers[4] = 10
                            
                        if x == 6:
                            self.label12.setGeometry(370, 230, 140, 140)
                            self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[1][2] = 2
                            self.last_numbers[5] = 10
                            
                        if x == 7:
                            self.label20.setGeometry(90, 370, 140, 140)
                            self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[2][0] = 2
                            self.last_numbers[6] = 10
                            
                        if x == 8:
                            self.label21.setGeometry(230, 370, 140, 140)
                            self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[2][1] = 2
                            self.last_numbers[7] = 10
                            
                        if x == 9:
                            self.label22.setGeometry(370, 370, 140, 140)
                            self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[2][2] = 2
                            self.last_numbers[8] = 10
                            
                        break
                        
            if self.count == 1:
                self.count = 0
                
        self.new_games()


    def new_games(self):
            if (self.array[0][0] == 1 and self.array[1][1] == 1 and self.array[2][2] == 1) or (self.array[0][0] == 1 and \
                self.array[0][1] == 1 and self.array[0][2] == 1) or (self.array[0][0] == 1 and self.array[1][0] == 1 \
                and self.array[2][0] == 1) or (self.array[2][0] == 1 and self.array[2][1] == 1 and self.array[2][2] == 1) \
                or (self.array[0][2] == 1 and self.array[1][2] == 1 and self.array[2][2] == 1) or (self.array[2][0] == 1 \
                and self.array[1][1] == 1 and self.array[0][2] == 1) or (self.array[0][1] == 1 and self.array[1][1] == 1 \
                and self.array[2][1] == 1) or (self.array[1][0] == 1 and self.array[1][1] == 1 and self.array[1][2] == 1):
                self.first_team+=1; self.reset = True

            if (self.array[0][0] == 2 and self.array[1][1] == 2 and self.array[2][2] == 2) or (self.array[0][0] == 2 and \
                self.array[0][1] == 2 and self.array[0][2] == 2) or (self.array[0][0] == 2 and self.array[1][0] == 2 \
                and self.array[2][0] == 2) or (self.array[2][0] == 2 and self.array[2][1] == 2 and self.array[2][2] == 2) \
                or (self.array[0][2] == 2 and self.array[1][2] == 2 and self.array[2][2] == 2) or (self.array[2][0] == 2 \
                and self.array[1][1] == 2 and self.array[0][2] == 2) or (self.array[0][1] == 2 and self.array[1][1] == 2 \
                and self.array[2][1] == 2) or (self.array[1][0] == 2 and self.array[1][1] == 2 and self.array[1][2] == 2):
                self.second_team+=1; self.reset = True

            if self.second_team > 9 or self.first_team > 9:
                self.res()
                self.reset = False

            if self.count == 9:
                self.reset = True

            if self.reset == True:
                self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")

                self.prev_label00.setStyleSheet(self.label00.styleSheet())
                self.prev_label01.setStyleSheet(self.label01.styleSheet())
                self.prev_label02.setStyleSheet(self.label02.styleSheet())
                self.prev_label10.setStyleSheet(self.label10.styleSheet())
                self.prev_label11.setStyleSheet(self.label11.styleSheet())
                self.prev_label12.setStyleSheet(self.label12.styleSheet())
                self.prev_label20.setStyleSheet(self.label20.styleSheet())
                self.prev_label21.setStyleSheet(self.label21.styleSheet())
                self.prev_label22.setStyleSheet(self.label22.styleSheet())

                self.result.setText(f"{self.first_team} : {self.second_team}")

                self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
                self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                self.count = 0

                self.label00.setGeometry(0,0,0,0)
                self.label00.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label01.setGeometry(0,0,0,0)
                self.label01.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label02.setGeometry(0,0,0,0)
                self.label02.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label10.setGeometry(0, 0, 0, 0)
                self.label10.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label11.setGeometry(0, 0, 0, 0)
                self.label11.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label12.setGeometry(0, 0, 0, 0)
                self.label12.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label20.setGeometry(0, 0, 0, 0)
                self.label20.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label21.setGeometry(0, 0, 0, 0)
                self.label21.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label22.setGeometry(0, 0, 0, 0)
                self.label22.setStyleSheet("background-color: rgb(0, 85, 127);")

                self.reset = False

    def res(self):
        self.first_team = 0
        self.second_team = 0

        self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
        self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        self.count = 0

        self.label00.setGeometry(0, 0, 0, 0)
        self.label01.setGeometry(0, 0, 0, 0)
        self.label02.setGeometry(0, 0, 0, 0)
        self.label10.setGeometry(0, 0, 0, 0)
        self.label11.setGeometry(0, 0, 0, 0)
        self.label12.setGeometry(0, 0, 0, 0)
        self.label20.setGeometry(0, 0, 0, 0)
        self.label21.setGeometry(0, 0, 0, 0)
        self.label22.setGeometry(0, 0, 0, 0)

        self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")

        self.result.setText(f"{self.first_team} : {self.second_team}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example ()
    ex.action()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

void QTest::qWait(int ms)

Ожидает миллисекунды ms. Во время ожидания события будут обрабатываться, и ваш тест будет реагировать на события пользовательского интерфейса или сетевое взаимодействие.

Больше https://doc.qt.io/qt-5/qtest.html#qWait


...
from PyQt5.QtTest import *                                           # +++

...
    ...
            QTest.qWait(2000)                      # +++ миллисекунд
    ...

import sys
import random, time
from PyQt5.QtWidgets import (QPushButton,QWidget, QHBoxLayout, QLabel, QApplication, QFileDialog)
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5 import QtCore, Qt

from PyQt5.QtTest import *                                           # +++


class Example (QWidget):
    def __init__(self):
        self.count = 0
        self.first_team, self.second_team = 0, 0
        self.array = [[0,0,0],[0,0,0],[0,0,0]]
        self.reset = False
        self.enable = False
        self.last_numbers = [1,2,3,4,5,6,7,8,9]
        super ().__init__()
        self.initUI ()

    def initUI(self):
        self.button00 = QPushButton(self)
        self.button00.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button00.setGeometry(90,90,140,140)

        self.button01 = QPushButton(self)
        self.button01.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button01.setGeometry(230, 90, 140, 140)

        self.button02 = QPushButton(self)
        self.button02.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button02.setGeometry(370, 90, 140, 140)

        self.button10 = QPushButton(self)
        self.button10.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button10.setGeometry(90, 230, 140, 140)

        self.button11 = QPushButton(self)
        self.button11.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button11.setGeometry(230, 230, 140, 140)

        self.button12 = QPushButton(self)
        self.button12.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button12.setGeometry(370, 230, 140, 140)

        self.button20 = QPushButton(self)
        self.button20.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button20.setGeometry(90, 370, 140, 140)

        self.button21 = QPushButton(self)
        self.button21.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button21.setGeometry(230, 370, 140, 140)

        self.button22 = QPushButton(self)
        self.button22.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.button22.setGeometry(370, 370, 140, 140)

        self.label00 = QLabel(self)
        self.label01 = QLabel(self)
        self.label02 = QLabel(self)
        self.label10 = QLabel(self)
        self.label11 = QLabel(self)
        self.label12 = QLabel(self)
        self.label20 = QLabel(self)
        self.label21 = QLabel(self)
        self.label22 = QLabel(self)

        self.prev_label00 = QLabel(self)
        self.prev_label00.setGeometry(515, 5, 20,20)

        self.prev_label01 = QLabel(self)
        self.prev_label01.setGeometry(535, 5, 20, 20)

        self.prev_label02 = QLabel(self)
        self.prev_label02.setGeometry(555, 5, 20, 20)

        self.prev_label10 = QLabel(self)
        self.prev_label10.setGeometry(515, 25, 20, 20)

        self.prev_label11 = QLabel(self)
        self.prev_label11.setGeometry(535, 25, 20, 20)

        self.prev_label12 = QLabel(self)
        self.prev_label12.setGeometry(555, 25, 20, 20)

        self.prev_label20 = QLabel(self)
        self.prev_label20.setGeometry(515, 45, 20, 20)

        self.prev_label21 = QLabel(self)
        self.prev_label21.setGeometry(535, 45, 20, 20)

        self.prev_label22 = QLabel(self)
        self.prev_label22.setGeometry(555, 45, 20, 20)



        self.result = QLabel(self)
        self.result.setText(f"{self.first_team} : {self.second_team}")
        self.result.setGeometry(10,10,72,40)
        self.result.setStyleSheet("background-color: rgb(255, 0, 0); \n"
                                  "font: 18pt \"OCR A Extended\";")

        self.resetButton = QPushButton(self)
        self.resetButton.setText("Сбросить счет")
        self.resetButton.setGeometry(120, 10, 200, 40)
        self.resetButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
                                       "font: 18pt \"OCR A Extended\";")

        self.botButton = QPushButton(self)
        self.botButton.setText("AI")
        self.botButton.setGeometry(350,10,140,40)
        self.botButton.setStyleSheet("background-color: rgb(255, 0, 0);\n"
                                     "font: 18pt \"OCR A Extended\";")

        self.setWindowIcon(QIcon("Tic_tac_toe.ico"))
        self.resize(600,600)
        self.move (300, 200)
        self.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.setWindowTitle ('Tic-Tac-Toe')
        self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)
        self.setFixedSize(self.size())
        self.show ()

    def action(self):
        self.button00.clicked.connect(lambda: self.turn(self.button00.geometry()))
        self.button01.clicked.connect(lambda: self.turn(self.button01.geometry()))
        self.button02.clicked.connect(lambda: self.turn(self.button02.geometry()))
        self.button10.clicked.connect(lambda: self.turn(self.button10.geometry()))
        self.button11.clicked.connect(lambda: self.turn(self.button11.geometry()))
        self.button12.clicked.connect(lambda: self.turn(self.button12.geometry()))
        self.button20.clicked.connect(lambda: self.turn(self.button20.geometry()))
        self.button21.clicked.connect(lambda: self.turn(self.button21.geometry()))
        self.button22.clicked.connect(lambda: self.turn(self.button22.geometry()))
        
        self.resetButton.clicked.connect(self.res)

        self.botButton.clicked.connect(self.startBot)

    def startBot(self):
        if self.enable == False:
            self.res()
            self.botButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
                                         "font: 18pt \"OCR A Extended\";")
            self.enable = True
            
        else:
            self.res()
            self.botButton.setStyleSheet("background-color: rgb(255, 0, 0); \n"
                                         "font: 18pt \"OCR A Extended\";")
            self.enable = False

    def turn(self, button_geometry):
        self.count += 1
         
        if self.enable == False:
            if self.count%2 == 1:
                if button_geometry == self.button00.geometry():
                    self.label00.setGeometry(button_geometry)
                    self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][0] = 1
    
                if button_geometry == self.button01.geometry():
                    self.label01.setGeometry(button_geometry)
                    self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][1] = 1
    
                if button_geometry == self.button02.geometry():
                    self.label02.setGeometry(button_geometry)
                    self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][2] = 1
    
                if button_geometry == self.button10.geometry():
                    self.label10.setGeometry(button_geometry)
                    self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][0] = 1
    
                if button_geometry == self.button11.geometry():
                    self.label11.setGeometry(button_geometry)
                    self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][1] = 1
    
                if button_geometry == self.button12.geometry():
                    self.label12.setGeometry(button_geometry)
                    self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][2] = 1
    
                if button_geometry == self.button20.geometry():
                    self.label20.setGeometry(button_geometry)
                    self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][0] = 1
    
                if button_geometry == self.button21.geometry():
                    self.label21.setGeometry(button_geometry)
                    self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][1] = 1
    
                if button_geometry == self.button22.geometry():
                    self.label22.setGeometry(button_geometry)
                    self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][2] = 1
    
            if self.count%2 == 0:
                if button_geometry == self.button00.geometry():
                    self.label00.setGeometry(button_geometry)
                    self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[0][0] = 2
    
                if button_geometry == self.button01.geometry():
                    self.label01.setGeometry(button_geometry)
                    self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[0][1] = 2
    
                if button_geometry == self.button02.geometry():
                    self.label02.setGeometry(button_geometry)
                    self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[0][2] = 2
    
                if button_geometry == self.button10.geometry():
                    self.label10.setGeometry(button_geometry)
                    self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[1][0] = 2
    
                if button_geometry == self.button11.geometry():
                    self.label11.setGeometry(button_geometry)
                    self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[1][1] = 2
    
                if button_geometry == self.button12.geometry():
                    self.label12.setGeometry(button_geometry)
                    self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[1][2] = 2
    
                if button_geometry == self.button20.geometry():
                    self.label20.setGeometry(button_geometry)
                    self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[2][0] = 2
    
                if button_geometry == self.button21.geometry():
                    self.label21.setGeometry(button_geometry)
                    self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[2][1] = 2
    
                if button_geometry == self.button22.geometry():
                    self.label22.setGeometry(button_geometry)
                    self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
                    self.array[2][2] = 2
                    
        if self.enable == True:
            if self.count % 2 == 1:
                if button_geometry == self.button00.geometry():
                    self.label00.setGeometry(button_geometry)
                    self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][0] = 1
                    self.last_numbers[0] = 10

                if button_geometry == self.button01.geometry():
                    self.label01.setGeometry(button_geometry)
                    self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][1] = 1
                    self.last_numbers[1] = 10
                    
                if button_geometry == self.button02.geometry():
                    self.label02.setGeometry(button_geometry)
                    self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[0][2] = 1
                    self.last_numbers[2] = 10
                    
                if button_geometry == self.button10.geometry():
                    self.label10.setGeometry(button_geometry)
                    self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][0] = 1
                    self.last_numbers[3] = 10

                if button_geometry == self.button11.geometry():
                    self.label11.setGeometry(button_geometry)
                    self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][1] = 1
                    self.last_numbers[4] = 10

                if button_geometry == self.button12.geometry():
                    self.label12.setGeometry(button_geometry)
                    self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[1][2] = 1
                    self.last_numbers[5] = 10

                if button_geometry == self.button20.geometry():
                    self.label20.setGeometry(button_geometry)
                    self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][0] = 1
                    self.last_numbers[6] = 10

                if button_geometry == self.button21.geometry():
                    self.label21.setGeometry(button_geometry)
                    self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][1] = 1
                    self.last_numbers[7] = 10
                    
                if button_geometry == self.button22.geometry():
                    self.label22.setGeometry(button_geometry)
                    self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
                    self.array[2][2] = 1
                    self.last_numbers[8] = 10
                    
                self.new_games()
                self.count += 1
# !!!            
            #QApplication.processEvents()            
            QTest.qWait(2000)                      # +++ миллисекунд
   
            if self.count % 2 == 0:
                while True:
                    random_turn = random.randint(0,len(self.last_numbers)-1)
                    x = self.last_numbers[random_turn]

                    if x < 10:
                        if x == 1:
                            self.label00.setGeometry(90,90,140,140)
                            self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[0][0] = 2
                            self.last_numbers[0] = 10
                            
                        if x == 2:
                            self.label01.setGeometry(230, 90, 140, 140)
                            self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[0][1] = 2
                            self.last_numbers[1] = 10
                            
                        if x == 3:
                            self.label02.setGeometry(370, 90, 140, 140)
                            self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[0][2] = 2
                            self.last_numbers[2] = 10
                            
                        if x == 4:
                            self.label10.setGeometry(90, 230, 140, 140)
                            self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[1][0] = 2
                            self.last_numbers[3] = 10
                            
                        if x == 5:
                            self.label11.setGeometry(230, 230, 140, 140)
                            self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[1][1] = 2
                            self.last_numbers[4] = 10
                            
                        if x == 6:
                            self.label12.setGeometry(370, 230, 140, 140)
                            self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[1][2] = 2
                            self.last_numbers[5] = 10
                            
                        if x == 7:
                            self.label20.setGeometry(90, 370, 140, 140)
                            self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[2][0] = 2
                            self.last_numbers[6] = 10
                            
                        if x == 8:
                            self.label21.setGeometry(230, 370, 140, 140)
                            self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[2][1] = 2
                            self.last_numbers[7] = 10
                            
                        if x == 9:
                            self.label22.setGeometry(370, 370, 140, 140)
                            self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
                            self.array[2][2] = 2
                            self.last_numbers[8] = 10
                            
                        break
                        
            if self.count == 1:
                self.count = 0
                
        self.new_games()


    def new_games(self):
            if (self.array[0][0] == 1 and self.array[1][1] == 1 and self.array[2][2] == 1) or (self.array[0][0] == 1 and \
                self.array[0][1] == 1 and self.array[0][2] == 1) or (self.array[0][0] == 1 and self.array[1][0] == 1 \
                and self.array[2][0] == 1) or (self.array[2][0] == 1 and self.array[2][1] == 1 and self.array[2][2] == 1) \
                or (self.array[0][2] == 1 and self.array[1][2] == 1 and self.array[2][2] == 1) or (self.array[2][0] == 1 \
                and self.array[1][1] == 1 and self.array[0][2] == 1) or (self.array[0][1] == 1 and self.array[1][1] == 1 \
                and self.array[2][1] == 1) or (self.array[1][0] == 1 and self.array[1][1] == 1 and self.array[1][2] == 1):
                self.first_team+=1; self.reset = True

            if (self.array[0][0] == 2 and self.array[1][1] == 2 and self.array[2][2] == 2) or (self.array[0][0] == 2 and \
                self.array[0][1] == 2 and self.array[0][2] == 2) or (self.array[0][0] == 2 and self.array[1][0] == 2 \
                and self.array[2][0] == 2) or (self.array[2][0] == 2 and self.array[2][1] == 2 and self.array[2][2] == 2) \
                or (self.array[0][2] == 2 and self.array[1][2] == 2 and self.array[2][2] == 2) or (self.array[2][0] == 2 \
                and self.array[1][1] == 2 and self.array[0][2] == 2) or (self.array[0][1] == 2 and self.array[1][1] == 2 \
                and self.array[2][1] == 2) or (self.array[1][0] == 2 and self.array[1][1] == 2 and self.array[1][2] == 2):
                self.second_team+=1; self.reset = True

            if self.second_team > 9 or self.first_team > 9:
                self.res()
                self.reset = False

            if self.count == 9:
                self.reset = True

            if self.reset == True:
                self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")

                self.prev_label00.setStyleSheet(self.label00.styleSheet())
                self.prev_label01.setStyleSheet(self.label01.styleSheet())
                self.prev_label02.setStyleSheet(self.label02.styleSheet())
                self.prev_label10.setStyleSheet(self.label10.styleSheet())
                self.prev_label11.setStyleSheet(self.label11.styleSheet())
                self.prev_label12.setStyleSheet(self.label12.styleSheet())
                self.prev_label20.setStyleSheet(self.label20.styleSheet())
                self.prev_label21.setStyleSheet(self.label21.styleSheet())
                self.prev_label22.setStyleSheet(self.label22.styleSheet())

                self.result.setText(f"{self.first_team} : {self.second_team}")

                self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
                self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                self.count = 0

                self.label00.setGeometry(0,0,0,0)
                self.label00.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label01.setGeometry(0,0,0,0)
                self.label01.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label02.setGeometry(0,0,0,0)
                self.label02.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label10.setGeometry(0, 0, 0, 0)
                self.label10.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label11.setGeometry(0, 0, 0, 0)
                self.label11.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label12.setGeometry(0, 0, 0, 0)
                self.label12.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label20.setGeometry(0, 0, 0, 0)
                self.label20.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label21.setGeometry(0, 0, 0, 0)
                self.label21.setStyleSheet("background-color: rgb(0, 85, 127);")
                self.label22.setGeometry(0, 0, 0, 0)
                self.label22.setStyleSheet("background-color: rgb(0, 85, 127);")

                self.reset = False

    def res(self):
        self.first_team = 0
        self.second_team = 0

        self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
        self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        self.count = 0

        self.label00.setGeometry(0, 0, 0, 0)
        self.label01.setGeometry(0, 0, 0, 0)
        self.label02.setGeometry(0, 0, 0, 0)
        self.label10.setGeometry(0, 0, 0, 0)
        self.label11.setGeometry(0, 0, 0, 0)
        self.label12.setGeometry(0, 0, 0, 0)
        self.label20.setGeometry(0, 0, 0, 0)
        self.label21.setGeometry(0, 0, 0, 0)
        self.label22.setGeometry(0, 0, 0, 0)

        self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
        self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")

        self.result.setText(f"{self.first_team} : {self.second_team}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example ()
    ex.action()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка