Python Forum
right mouse button click with PyQt5
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
right mouse button click with PyQt5
#1
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
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_())
Reply


Messages In This Thread
right mouse button click with PyQt5 - by brecht83 - Nov-06-2018, 03:00 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  tkinter - touchscreen, push the button like click the mouse John64 5 875 Jan-06-2024, 03:45 PM
Last Post: deanhystad
  Figure Gets Larger Every time I click a show button joshuagreineder 2 1,336 Aug-11-2022, 06:25 AM
Last Post: chinky
  [Tkinter] Modify Class on Button Click KDog 4 3,984 May-11-2021, 08:43 PM
Last Post: KDog
  [Tkinter] Mouse click without use bind ATARI_LIVE 8 7,498 Oct-23-2020, 10:41 PM
Last Post: ATARI_LIVE
  [Tkinter] Button click problem using OOP JohnB 5 3,650 Oct-21-2020, 12:43 PM
Last Post: JohnB
  tkinter | Button color text on Click Maryan 2 3,404 Oct-09-2020, 08:56 PM
Last Post: Maryan
  [Tkinter] program unresponsive during pynput mouse click RobotTech 1 3,512 May-07-2020, 04:43 PM
Last Post: RobotTech
  Closing window on button click not working kenwatts275 4 3,810 May-03-2020, 01:59 PM
Last Post: deanhystad
  [PyQt] Pyqt5: How do you make a button that adds new row with data to a Qtablewidget YoshikageKira 6 7,047 Jan-02-2020, 04:32 PM
Last Post: Denni
  [Tkinter] Mouse click event not working on multiple tkinter window evrydaywannabe 2 3,781 Dec-16-2019, 04:47 AM
Last Post: woooee

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020