Так как я не знаю,как подружить функцию 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.
|