Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/103: Рейтинг темы: голосов - 103, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 09.03.2017
Сообщений: 57

Кнопки в pygame

09.09.2018, 14:10. Показов 19641. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста как реализовать в pygame выделение кнопки при наведении на нее курсора? Пробовал сделать отслеживание позиции мыши event.type == pygame.MOUSEMOTION:,но что то у меня ничего не выходит
Мой класс Button:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import pygame
 
class Button:
    def __init__(self,path,text,x,y):
 
        self.size = [190,45] #Размер кнопки
        self.image_button = pygame.image.load(path) #Загружаем изображение исходной кнопки
        self.text = text #Текст кнопки
        self.x = x #Позиция х кнопки
        self.y = y #Позиция у кнопки
        self.rect_button = pygame.Rect(self.x,self.y,self.size[0],self.size[1]) #Прямоугольник для создания коллизии с курсором
        self.rect_image_button = self.image_button.get_rect()
        """Создание кнопки при нажатии на нее"""
        self.image_click = pygame.image.load("images/blue_button03.png")
        self.image_put_on_button = pygame.image.load("images/blue_button01.png")
 
 
    def create_button(self,settings,color):
        """Создает кнопку на экране"""
        text_button = settings.font_text.render(self.text,True,color) #Создаем изображение с текстом
        text_rect = text_button.get_rect() #Возвращаем прямоугольник который занимает текст
        text_rect.center = self.rect_image_button.center #Делаем текст посередине кнопки
        self.image_button.blit(text_button,text_rect)
        self.image_click.blit(text_button,text_rect)
        self.image_put_on_button.blit(text_button,text_rect)
 
    def draw_button(self,screen,control): #Рисует созданную кнопку на экране
       """Рисует кнопку в зависимости от флага,который берется из класса Control"""
       if self.rect_button.collidepoint(control.mouse_x,control.mouse_y) and control.flag == "CLICKED":
 
           screen.blit(self.image_click, (self.x, self.y)) #Если кликнули мышкой то рисуем кнопку нажатой
 
       elif control.flag == "NORMAL":
 
           screen.blit(self.image_button,(self.x,self.y)) #Если ничего не происходит,то рисуем обычную кнопку
 
       elif self.rect_button.collidepoint(control.mouse_x,control.mouse_y):
 
           screen.blit(self.image_put_on_button,(self.x,self.y))
Класс Control:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import pygame
from pygame.locals import *
 
class Control:
    def __init__(self):
 
        self.play = True #Переменная для остановки основного цикла игры
        self.mouse_x = 0 #Позиция х курсора
        self.mouse_y = 0 #Позиция у курсора
        self.flag = "NORMAL" #Флаг для отрисовки кнопок
 
    def control_game(self):
        """Все управление игрой"""
        for event in pygame.event.get():
 
            if event.type == QUIT:
                self.play = False
 
            elif event.type == KEYDOWN:
 
                if event.key == K_ESCAPE:
                    self.play = False
 
            elif event.type == MOUSEBUTTONDOWN:
 
                self.mouse_x,self.mouse_y = pygame.mouse.get_pos()
                self.flag = "CLICKED"
 
            elif event.type == MOUSEBUTTONUP:
 
                self.flag = "NORMAL"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2018, 14:10
Ответы с готовыми решениями:

При нажатии кнопки PyQt5 открыть окно PyGame
Здравствуйте, возможно ли при нажатии на кнопку PyQt5 открыть окно PyGame? это первая форма, на которой при нажатии кнопки играть...

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не работает.Почему?Что ещё надо для работы...

Ошибка в pygame AttributeError: 'pygame.Rect' object has no attribute 'blit'
Создаю игру, крестики нолики Почему возникает ошибка и как ее исправить? AttributeError: 'pygame.Rect' object has no attribute 'blit' ...

1
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
09.09.2018, 16:11
Вот пример простого gui для pygame https://github.com/ddorn/GUI
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2018, 16:11
Помогаю со студенческими работами здесь

pygame.error: cannot convert without pygame.display initialized
Только начал изучать спрайты Выдаёт ошибку: Traceback (most recent call last): File "D:/project1/OCode.py", line 18, in...

Pygame ошибка module ‘pygame’ has no ‘init’ member
Всем здравствуйте. Недавно начал работать с VS code и выдает такая ошибка. Прикрепляю полностью скрин. Нашел решение перед каждой...

Как менять местами кнопки в tkinter или же переписать этот код на pygame
Как при нажатии заставить программу запоминать нажатую кнопку и при нажатии следующей менять их местами Фактически я хочу двигать...

кнопки в Pygame
Доброго времени суток. Есть следующая проблема: я создаю кнопку (прямоугольник) и привязываю его к изображению, затем ловлю на нём...

Не работают кнопки в pygame
Я вообще без понятия, почему в одном документе работают кнопки а в другом нет. (код где все работает)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru