Переменная не обновляется после выхода из функции - PullRequest
0 голосов
/ 12 апреля 2019

Я сделал слайдер, который должен обновлять размер сетки, которую я сделал.При щелчке и перемещении ползунка значение ползунка изменяется, однако размер сетки остается прежним и не обновляется.Как бы я решил это?спасибо.

Вот функция, которую я использую для обновления значения ползунка.Это вызывается при нажатии на слайдер в игровом цикле

def slider_loop(s):
    s.move()
    grid_size = int(slider_value.val)
    return grid_size

здесь есть раздел в основном игровом цикле, где цикл слайдера называется

    for s in slides:
        if s.hit:
            slider_loop(s)

здесь это класс слайдера

class slider():
    def __init__(self, name, val, maxi, mini, x_pos, y_pos):
        font = pygame.font.SysFont("Verdana", 12)
        self.val = val  # start value
        self.maxi = maxi  # maximum at slider position right
        self.mini = mini  # minimum at slider position left
        self.xpos = x_pos  # x-location on screen
        self.ypos = y_pos
        self.surf = pygame.surface.Surface((100, 50))
        self.hit = False  # the hit attribute indicates slider movement due to mouse interaction

        self.txt_surf = font.render(name, 1, black)
        self.txt_rect = self.txt_surf.get_rect(center=(50, 15))

        # Static graphics - slider background #
        self.surf.fill((100, 100, 100))
        pygame.draw.rect(self.surf, grey, [0, 0, 100, 50], 3)
        pygame.draw.rect(self.surf, orange, [10, 10, 80, 10], 0)
        pygame.draw.rect(self.surf, white, [10, 30, 80, 5], 0)

        self.surf.blit(self.txt_surf, self.txt_rect)  # this surface never changes

        # dynamic graphics - button surface #
        self.button_surf = pygame.surface.Surface((20, 20))
        self.button_surf.fill(trans)
        self.button_surf.set_colorkey(trans)
        pygame.draw.circle(self.button_surf, black, (10, 10), 6, 0)
        pygame.draw.circle(self.button_surf, orange, (10, 10), 4, 0)

    def draw(self):
        """ Combination of static and dynamic graphics in a copy of
the basic slide surface
"""
        # static
        surf = self.surf.copy()

        # dynamic
        pos = (10+int((self.val-self.mini)/(self.maxi-self.mini)*80), 33)
        self.button_rect = self.button_surf.get_rect(center=pos)
        surf.blit(self.button_surf, self.button_rect)
        self.button_rect.move_ip(self.xpos, self.ypos)  # move of button box to correct screen position

        # screen
        screen.blit(surf, (self.xpos, self.ypos))

    def move(self):
        """
The dynamic part; reacts to movement of the slider button.
"""
        self.val = (pygame.mouse.get_pos()[0] - self.xpos - 10) / 80 * (self.maxi - self.mini) + self.mini
        if self.val < self.mini:
            self.val = self.mini
        if self.val > self.maxi:
            self.val = self.maxi

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Ваш цикл for, вероятно, должен выглядеть следующим образом:
(потому что в настоящее время вы вообще не используете возвращенное значение grid_size)

for s in slides:
    if s.hit:
        grid_size = slider_loop(s)

И ваша функция должна быть исправлена ​​набыть таким:

def slider_loop(s):
    s.move()
    grid_size = int(s.val)
    return grid_size
0 голосов
/ 12 апреля 2019

Похоже, что grid_size возвращается slider_loop, но никогда не используется в вашем коде.Сделайте что-то вроде

new_grid_size = slider_loop(s) 

, если хотите получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...