Python Forum
Python minesweeper game gtk3 get label value after click
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python minesweeper game gtk3 get label value after click
#1
I write simple minesweeper game in Python 2.7 with Gtk3. I have a problem with show value of label after click using
set_sensitive(False)
.

First case I use 
 button.hide()
after click and this works good, label value are shows up. 

M - is a mine on board

But I don't want to use
hide()
. I want to block button after click with
set_sensitive()
 property. I try do this in my
discover
function
return self.button.set_sensitive(False)
 but after that I don't get any value of my buttons. I clicked all board and all buttons are disable. Why I don't get any value of label? 


My code:


    import gi
    from random import randrange
    
    gi.require_version('Gtk', '3.0')
    from gi.repository import Gtk, Gdk
    
    
    class SaperButton(Gtk.Button):
        def __init__(self):
            Gtk.Button.__init__(self)
            self.set_size_request(50, 50)
    
    
    class Cell:
        def __init__(self):
            self.mine = False
            self.neighbormines = 0
            self.button = SaperButton()
    
        def place_mine(self):
            self.mine = True
    
        def is_mine(self):
            return self.mine
    
        def discover(self):
            print 'discover'
            # with hide showing values of label
            # with return self.button.set_sensitive(False) don't show
            return self.button.hide()
    
        def is_discovered(self):
            return not self.button.get_visible()
    
        def set_nighbromines(self, number):
            self.neighbormines = number
    
        def get_nighbromines(self):
            return self.neighbormines
    
        def get_button(self):
            return self.button
    
    
    class SaperGrid(Gtk.Grid):
        def __init__(self, rows, cols, ratio):
            self.rows = rows
            self.cols = cols
            self.cells = []
            self.ratio = ratio
            Gtk.Grid.__init__(self)
    
            for row in range(rows):
                for col in range(cols):
                    cell = Cell()
                    self.cells.append(cell)
                    self.attach(cell.get_button(), row, col, 1, 1)
    
            self.place_mines()
    
        def get_cells(self):
            return self.cells
    
        def get_row_col_button(self, index):
    
            return (index / self.cols, index % self.cols)
    
        def place_mines(self):
            mines = 0
            while mines < (self.rows * self.cols * self.ratio):
    
                row = randrange(0, self.rows)
                col = randrange(0, self.cols)
    
                i = self.get_index(row, col)
    
                if not self.cells[i].is_mine():
    
                    mines += 1
                    self.cells[i].place_mine()
    
                    button = Gtk.Button()
                    label = Gtk.Label("M")
                    button.add(label)
    
                    self.attach(button, row, col, 1, 1)
    
            for i, val in enumerate(self.cells):
                print self.cells[i]
    
        def get_index(self, row, col):
            return (row * self.cols) + col
    
        def discover_cell(self, row, col):
            index = self.get_index(row, col)
            print 'index', index
            self.cells[index].discover()
    
        def discover_all_cells(self):
            for cell in self.cells:
                cell.discover()
    
    
    class Saper:
        def __init__(self, rows, cols):
            self.window = Gtk.Window()
            self.rows = rows
            self.cols = cols
            self.vbox = Gtk.VBox()
            self.window.add(self.vbox)
            self.create_grid(rows, cols)
    
        def create_grid(self, rows, cols):
    
            self.grid = SaperGrid(rows, cols, 0.10)
    
            for i, cell in enumerate(self.grid.get_cells()):
                (row, col) = self.grid.get_row_col_button(i)
                print 'Button connect in col {} row {}'.format(col, row)
                cell.get_button().connect('clicked', self.clicked_handler, row, col)
    
            self.grid.set_column_homogeneous(True)
            self.grid.set_row_homogeneous(True)
            self.vbox.pack_start(self.grid, expand=True, fill=True, padding=0)
    
        def clicked_handler(self, button, row, col):
            cell_index = self.grid.get_index(row, col)
    
            self.grid.discover_cell(row, col)
    
        @staticmethod
        def exit(self, widget, data=None):
            Gtk.main_quit()
    
    
    win = Saper(5, 5)
    win.window.show_all()
    Gtk.main()
What's is wrong?
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Adding the timer, smiley face, and flags in Minesweeper. javesike1262 5 460 May-04-2021, 10:20 PM
Last Post: deanhystad
  [GI] Error when I close the interface Glade/GTK3/ Charles25 2 739 Jun-16-2020, 07:02 PM
Last Post: Charles25
  [Tkinter] Python 3 change label text gw1500se 6 1,656 May-08-2020, 05:47 PM
Last Post: deanhystad
  [PyQt] Python PyQt5 - Change label text dynamically based on user Input ppel123 1 5,888 Mar-20-2020, 07:21 AM
Last Post: deanhystad
  Make Label Text background (default color) transparent using tkinter in python barry76 1 13,530 Nov-28-2019, 10:19 AM
Last Post: Larz60+
  Problem with Gtk3 and GLArea gsohler 0 1,003 Aug-12-2019, 07:33 AM
Last Post: gsohler
  Help - GTK3 + Pango: Printing data as table format scandido 0 1,913 Jan-26-2018, 06:03 PM
Last Post: scandido
  python3 + gtk3 image sequence changos 0 2,100 Apr-24-2017, 04:10 PM
Last Post: changos

Forum Jump:

User Panel Messages

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