Nov-06-2018, 03:00 PM
I'm trying to write a mineweeper program in PyQt5
This is what I already have.
I still have 2 problems:
1* How do I detect a right mouse button click on a button? As you can see I already have a left mouse button click
2* I created a grid of buttons but I'm unable to remove the space between the buttons. How do I do that
I also don't understand the differece between
This is what I already have.
I still have 2 problems:
1* How do I detect a right mouse button click on a button? As you can see I already have a left mouse button click
2* I created a grid of buttons but I'm unable to remove the space between the buttons. How do I do that
I also don't understand the differece between
class Window(QDialog)and
class Window(QtWidgets.QMainWindow):
import sys
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from functools import partial
from random import randint
class Window(QDialog):
def __init__(self):
super().__init__()
self.setGeometry(50,50,600,300)
self.setWindowTitle("Minesweeper")
self.setWindowIcon(QtGui.QIcon('favicon.png'))
self.initGame()
self.mainPage()
def mainPage(self):
self.createGridLayout()
windowLayout = QVBoxLayout()
windowLayout.addWidget(self.horizontalGroupBox)
self.setLayout(windowLayout)
self.show()
def initGame(self):
self.initialArray=[[0 for i in range(10)]for j in range(10)]
self.counterTurns=0
for column in range (0,10):
for row in range (0,10):
bomb=randint(0,6)
if bomb==6:
self.initialArray[row][column]=9
if row-1>=0 and self.initialArray[row-1][column]!=9:
self.initialArray[row-1][column]+=1
if row+1<=9 and self.initialArray[row+1][column]!=9:
self.initialArray[row+1][column]+=1
if column-1>=0 and self.initialArray[row][column-1]!=9:
self.initialArray[row][column-1]+=1
if column+1<=9 and self.initialArray[row][column+1]!=9:
self.initialArray[row][column+1]+=1
if row-1>=0 and column-1>=0 and self.initialArray[row-1][column-1]!=9:
self.initialArray[row-1][column-1]+=1
if row+1<=9 and column-1>=0 and self.initialArray[row+1][column-1]!=9:
self.initialArray[row+1][column-1]+=1
if row-1>=0 and column+1<=9 and self.initialArray[row-1][column+1]!=9:
self.initialArray[row-1][column+1]+=1
if row+1<=9 and column+1<=9 and self.initialArray[row+1][column+1]!=9:
self.initialArray[row+1][column+1]+=1
def createGridLayout(self):
self.horizontalGroupBox=QGroupBox()
layout=QGridLayout()
self.button={}
for column in range (0,10):
for row in range (0,10):
self.button[row,column]=QPushButton(self)
self.button[row,column].setFixedHeight(20)
self.button[row,column].setFixedWidth(20)
self.button[row,column].setIcon(QtGui.QIcon('tile_plain.gif'))
self.button[row,column].clicked.connect(partial(self.buttonPressed,row,column))
layout.addWidget(self.button[row,column],row,column)
for row in self.initialArray:
print (row)
self.horizontalGroupBox.setLayout(layout)
def buttonPressed(self,row,column):
self.displayEmptyButtons(row,column)
self.counterTurns+=1
print ('rij'+str(row)+'\nkolom'+str(column))
if self.initialArray[row][column]==9:
print ('bomb!!!! ' + str(self.counterTurns))
game_busy=0
values=[1,2,3,4,5,6,7,8]
for x in self.initialArray:
print (x)
if any(i in values for i in x):
game_busy=1
if game_busy==0:
print ('you won')
def displayEmptyButtons(self,row,column):
if self.initialArray[row][column]!=0:
if self.initialArray[row][column]!=10:
self.button[row,column].setText(str(self.initialArray[row][column]))
self.initialArray[row][column]=10
else:
if self.initialArray[row][column]!=10:
self.button[row,column].setText(str(self.initialArray[row][column]))
self.initialArray[row][column]=10
if row-1>=0:
self.displayEmptyButtons(row-1,column)
if row+1<=9:
self.displayEmptyButtons(row+1,column)
if column-1>=0:
self.displayEmptyButtons(row,column-1)
if column+1<=9:
self.displayEmptyButtons(row,column+1)
if row-1>=0 and column-1>=0:
self.displayEmptyButtons(row-1,column-1)
if row+1<=9 and column-1>=0:
self.displayEmptyButtons(row+1,column-1)
if row-1>=0 and column+1<=9:
self.displayEmptyButtons(row-1,column+1)
if row+1<=9 and column+1<=9:
self.displayEmptyButtons(row+1,column+1)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Window()
sys.exit(app.exec_())
