ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오목게임 만들기-22.06.03~22.06.07
    파이썬 2022. 6. 7. 19:12
    728x90

     

     

     

    검색 Tip : pyqt qlabel pixmap

    https://wikidocs.net/33768 참고

    아그런데 label은 이벤트가 안먹히네....

    버튼으로 만들어보자 

    import sys
    from PyQt5 import uic
    from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
    from PyQt5.Qt import QPixmap
    
    
    form_class = uic.loadUiType("myomok01.ui")[0]
    
    class MainClass(QMainWindow, form_class):
        def __init__(self) :
            QMainWindow.__init__(self)
            self.setupUi(self)
            
            pixmap = QPixmap('0.png')
            mylbl = QLabel("sdfs",self)
            mylbl.setPixmap(pixmap)
            
            mylbl2 = QLabel("567",self)
            mylbl2.move(40,0)
            mylbl2.setPixmap(pixmap)
            
            
            self.show()
    
            self.pb.clicked.connect(self.myclick)
            self.lbl.clicked.connect(self.mychange)
            
        def mychange(self):
            print("mychange")
        
        def myclick(self):
            self.lbl.setText("Good Evening")
        
            
    if __name__ == "__main__" :
        app = QApplication(sys.argv) 
        window = MainClass() 
        app.exec_()

    =>안먹힘!!!


    버튼으로 만들기

     

    다시 40, 40 으로 바꿔주기 

     

     

    def printerButton(self,tab_name):
        self.printButton = QtGui.QPushButton(tab_name)
        self.printButton.setIcon(QtGui.QIcon('icons/printer.tif'))
        self.printButton.setIconSize(QtCore.QSize(130,130))
        self.printButton.setGeometry(QtCore.QRect(1030, 500, 161, 61))

     10,10으로 한것(myomok02.py)

    import sys
    from PyQt5 import uic, QtGui, QtCore
    from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton
    from PyQt5.Qt import QPixmap, QMessageBox
    from _ast import If
    
    
    form_class = uic.loadUiType("myomok02.ui")[0]
    
    class MainClass(QMainWindow, form_class):
        def __init__(self) :
            QMainWindow.__init__(self)
            self.setupUi(self)
            self.flag_wb = True
            self.flag_over = False
            self.arr2d = [
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0],
                
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0]
            ]
            self.dol2d = []
            
            for i in range(10):
                line = []
                for j in range(10):
                    doll = QPushButton("",self)
                    doll.setIcon(QtGui.QIcon('0.png'))
                    doll.setIconSize(QtCore.QSize(40,40))
                    doll.setToolTip("{},{}".format(i,j))
                    doll.setGeometry(QtCore.QRect(j*40, i*40, 40, 40))
                    doll.clicked.connect(self.myclick)
                    line.append(doll)
                self.dol2d.append(line)
                
            self.pb.clicked.connect(self.myreset)    
            self.show()
            self.myrender()
            
        def myreset(self):
            self.flag_over = False
            self.flag_wb = True
            for i in range(10):
                for j in range(10):
                    self.arr2d[i][j]=0
            self.myrender()
            
        def myrender(self):
            for i in range(10):
                for j in range(10):
                    if self.arr2d[i][j] == 0:
                        self.dol2d[i][j].setIcon(QtGui.QIcon('0.png'))
                    if self.arr2d[i][j] == 1:
                        self.dol2d[i][j].setIcon(QtGui.QIcon('1.png'))
                    if self.arr2d[i][j] == 2:
                        self.dol2d[i][j].setIcon(QtGui.QIcon('2.png')) 
     
        def checkRI(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    j += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt 
                        
        def checkUP(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
                
        def checkDW(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
        def checkLE(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    j -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt 
            
        def checkUR(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i -= 1
                    j += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
        def checkUL(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i -= 1
                    j -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
            
        def checkDR(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i += 1
                    j += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
            
        def checkDL(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i += 1
                    j -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
                        
        def myclick(self):
            if self.flag_over:
                return
            
            str_ij = self.sender().toolTip()
            arr_ij = str_ij.split(",")
            i = int(arr_ij[0])
            j = int(arr_ij[1])
            
            if self.arr2d[i][j]>0:
                return
            
            stone = -1
            if self.flag_wb :
                self.arr2d[i][j] = 1
                stone = 1
            else:
                self.arr2d[i][j] = 2  
                stone = 2
            up = self.checkUP(i,j,stone)
            dw = self.checkDW(i,j,stone)
            ri = self.checkRI(i,j,stone)
            le = self.checkLE(i,j,stone)
    
            ur = self.checkUR(i,j,stone)
            ul = self.checkUL(i,j,stone)
            dr = self.checkDR(i,j,stone)
            dl = self.checkDL(i,j,stone)
            
            d1= up + dw + 1
            d2= ur + dl + 1
            d3= ri + le + 1
            d4= ul + dr + 1
            
            
            self.myrender() 
            
            if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5:
                if self.flag_wb:
                    QMessageBox.about(self,'Omok',"백돌승리")
                else :
                    QMessageBox.about(self,'Omok',"흑돌승리")
                self.flag_over = True
    
                   
            
            self.flag_wb = not self.flag_wb
            
    if __name__ == "__main__" :
        app = QApplication(sys.argv) 
        window = MainClass() 
        app.exec_()

    19.19로 한것(myomok19.py)

    import sys
    from PyQt5 import uic, QtGui, QtCore
    from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton
    from PyQt5.Qt import QPixmap, QMessageBox
    
    
    
    form_class = uic.loadUiType("myomok19.ui")[0]
    
    class MainClass(QMainWindow, form_class):
        def __init__(self) :
            QMainWindow.__init__(self)
            self.setupUi(self)
            self.flag_wb = True
            self.flag_over = False
            self.arr2d = [
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
                [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0]
    
            ]
            self.dol2d = []
            
            for i in range(19):
                line = []
                for j in range(19):
                    doll = QPushButton("",self)
                    doll.setIcon(QtGui.QIcon('0.png'))
                    doll.setIconSize(QtCore.QSize(40,40))
                    doll.setToolTip("{},{}".format(i,j))
                    doll.setGeometry(QtCore.QRect(j*40, i*40, 40, 40))
                    doll.clicked.connect(self.myclick)
                    line.append(doll)
                self.dol2d.append(line)
                
            self.pb.clicked.connect(self.myreset)    
            self.show()
            self.myrender()
            
        def myreset(self):
            self.flag_over = False
            self.flag_wb = True
            for i in range(19):
                for j in range(19):
                    self.arr2d[i][j]=0
            self.myrender()
            
        def myrender(self):
            for i in range(19):
                for j in range(19):
                    if self.arr2d[i][j] == 0:
                        self.dol2d[i][j].setIcon(QtGui.QIcon('0.png'))
                    if self.arr2d[i][j] == 1:
                        self.dol2d[i][j].setIcon(QtGui.QIcon('1.png'))
                    if self.arr2d[i][j] == 2:
                        self.dol2d[i][j].setIcon(QtGui.QIcon('2.png')) 
     
        def checkRI(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    j += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt 
                        
        def checkUP(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
                
        def checkDW(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
        def checkLE(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    j -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt 
            
        def checkUR(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i -= 1
                    j += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
        def checkUL(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i -= 1
                    j -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
            
        def checkDR(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i += 1
                    j += 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
            
        def checkDL(self,i,j,stone):
            cnt = 0
            try:
                while True:
                    i += 1
                    j -= 1
                    if i < 0:
                        return cnt
                    if j < 0:
                        return cnt
                    if self.arr2d[i][j]==stone:
                        cnt += 1
                    else:
                        return cnt
            except:
                return cnt
            
                        
        def myclick(self):
            if self.flag_over:
                return
            
            str_ij = self.sender().toolTip()
            arr_ij = str_ij.split(",")
            i = int(arr_ij[0])
            j = int(arr_ij[1])
            
            if self.arr2d[i][j]>0:
                return
            
            stone = -1
            if self.flag_wb :
                self.arr2d[i][j] = 1
                stone = 1
            else:
                self.arr2d[i][j] = 2  
                stone = 2
            up = self.checkUP(i,j,stone)
            dw = self.checkDW(i,j,stone)
            ri = self.checkRI(i,j,stone)
            le = self.checkLE(i,j,stone)
    
            ur = self.checkUR(i,j,stone)
            ul = self.checkUL(i,j,stone)
            dr = self.checkDR(i,j,stone)
            dl = self.checkDL(i,j,stone)
            
            d1= up + dw + 1
            d2= ur + dl + 1
            d3= ri + le + 1
            d4= ul + dr + 1
            
            
            self.myrender() 
            
            if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5:
                if self.flag_wb:
                    QMessageBox.about(self,'Omok',"백돌승리")
                else :
                    QMessageBox.about(self,'Omok',"흑돌승리")
                self.flag_over = True
    
                   
            
            self.flag_wb = not self.flag_wb
            
    if __name__ == "__main__" :
        app = QApplication(sys.argv) 
        window = MainClass() 
        app.exec_()
    728x90

    '파이썬' 카테고리의 다른 글

    Crawling 2 , fast  (8) 2022.06.16
    Python Flask CORS ,Crawling  (0) 2022.06.14
    Flask에서 Ajax ,axios예제  (0) 2022.06.13
    pymysql -22.06.08-22.06.09  (0) 2022.06.09
    파이썬 -pyqt  (0) 2022.06.03
Designed by Tistory.