Воскресенье, 24.11.2024, 13:26 | Приветствую Вас Гость

...

Блог


05:56
Pygame.Урок 5

Так как я не знаю,как подружить функцию pygame.display.set_caption с русскими символами - я решил сделать беззаголовное графическое окно и создать в нём - собственный заголовок и собственное закрытие окна.
В данной реализации графического окна используется событие компьютерной мыши,которое отслеживает нажатие на кнопке в определенном диапазоне координат,как по x,так по y,чтобы отловить место при нажатие на которое - графическое окно закроется.
Здесь не хватает еще функциональности перетаскивания графического окна за заголовок.Почему-то в самой библиотеке pygame нет функции,позиционирующей окно относительно рабочего стола или я плохо искал,что тоже может иметь место.Именно такая функция нужна для того,чтобы создать эффект перетаскивания окна.Конечно никто не запрещает нам использовать родные winapi-функции для создания перетаскивания.
  
import pygame
from ctypes import windll
import win32api
pygame.init()
screen = pygame.display.set_mode((640, 480), pygame.NOFRAME)
myfont = pygame.font.SysFont(None, 25)
screen.fill((255,255,255))
mytext1 = myfont.render('Закрыть окно', True,(180, 0, 0))
screen.blit(mytext1, (500, 0))
text = myfont.render(' Здесь должно быть имя игры ', True, (255, 255, 255))
titlebar = pygame.Surface((500,20))
titlebar.fill((192, 192, 192))
titlebar.blit(text, (0, 0))
screen.blit(titlebar, (0, 0))
 
def moveWin(new_x, new_y):
    hwnd = pygame.display.get_wm_info()['window']
    w, h = pygame.display.get_surface().get_size()
    windll.user32.MoveWindow(hwnd, new_x, new_y, w, h, False)

window_pos = [0,0]
moveWin(*window_pos)
state = 0
Mousetitle_x = 0
Mousetitle_y = 0
while True:
   
   for event in pygame.event.get():
      if event.type == pygame.MOUSEBUTTONDOWN:
         if (event.pos[0] >= 500 and event.pos[0] <= 620):
          if (event.pos[1] >= 0 and event.pos[1] <= 30):
            pygame.quit()
            
         if (event.pos[0] >= 0 and event.pos[0] <= 500):
          if (event.pos[1] >= 0 and event.pos[1] <= 30):
            state = 1
            #запомнить координаты,когда мышь находится для самодельным заголовком
            Mousetitle_x, Mousetitle_y = win32api.GetCursorPos()
          
      if event.type == pygame.MOUSEBUTTONUP:
        state = 2
            
      if event.type == pygame.MOUSEMOTION:
        if  state == 1:
           #текущие координаты мыши
           cur_x, cur_y = win32api.GetCursorPos()
           window_pos[0] =  window_pos[0] +(cur_x - Mousetitle_x)
           window_pos[1] =  window_pos[1] +(cur_y - Mousetitle_y)
           moveWin(*window_pos)
           Mousetitle_x = cur_x
           Mousetitle_y = cur_y

           win32api.SetCursorPos((Mousetitle_x,Mousetitle_y))
         
   pygame.display.update()

Единственный минус данной программы в том,что работать она будет только на windows.

Просмотров: 86 | Добавил: moskov | Рейтинг: 0.0/0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Меню сайта

Мини-чат

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Календарь

«  Июнь 2023  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930

Архив записей

Друзья сайта

  • ЗОВ КОСМОСА

  • Хулиган Вселенной

  • Тюремная поэзия

  • Религиозная поэзия

  • Сайт клана ЛеГиоН
  • Поиск