Рубрики
Без рубрики

Pygame, Gopherspace и Window Managers

Как я написал клиент Gopherspace с виртуальным Window-Manager в Python, используя Pygame. Tagged с Showdev, Python, Pygame, Gopherspace.

Некоторые люди могут подумать, что Pygame в основном полезна для игр и мультимедиа, для этого не все это полезно. Некоторые люди также могут подумать, что вы не можете использовать несколько окон в Pygame. Хотя последний правда, мне удалось обойти это.

Во -первых, я хочу дать краткое описание того, что на самом деле такое суслика.

Еще перед Интернетом, в 1991 году, в Интернете появился новый протокол. Суслик. Вместо того, чтобы быть гипер текстом, или такой же грубым, как список каталогов FTP, суслика является как-то промежуточным.

Gopherspace – это всего лишь одна большая серия меню. Нет сценариев, нет более форматирования, чем простой документ .txt, и нет CSS. На протяжении многих лет суслик скользнул в потенциал. Тем не менее, он все еще там, отчасти к его нелепо простому протоколу:

Шаг 1:

Клиент подключается к серверу.

Шаг 2:

Клиент отправляет «селектор», он же путь желаемого документа, TAP+запрос, если это поисковый запрос, и CR+LF.:

/some/document[CRLF]
/some/query[tab]some search terms[CRLF]

Шаг 3:

Клиент ожидает, пока сервер отправляет полный документ/файл, или, если возникает ошибка, обычно страница ошибки, содержащая тип элемента ‘3’

Меню:

Синакс меню суслика, вероятно, не может быть проще (буквально): обычно порт 70. Первый символ каждой строки определяет тип элемента. Обратите внимание, что тип «я» имеет поле «Null» селектора, так как он не должен быть даже выбираемый.

iI'm an information type[tab]null[tab]server[tab]port[CRLF]
1I'm a gopher menu somewhere[tab]/this/is/a/selector/[tab]server[tab]port[CRLF]
0I'm a text document somewhere[tab]/this/is/a/selector/also.txt[tab]server[tab]port[CRLF]
7I'm a text query (or index search) somewhere[tab]/some/search[tab]server[tab]port[CRLF]

Тип ‘3’ возвращается при какой -то ошибке. Чаще всего несуществующий селектор, который сродни ошибке 404.

Есть много других типов и вещей, но это основы.

Теперь к веселой части. Как запустить несколько окон, а у вас всего 1? виртуальный менеджер окна.

Thomashespacefox/Strazoloid-Winding-Framework

Strazoloid является виртуальным управляющим окон для Pygame Applications & Games. Полезно для создания пользовательских средств с несколькими окнами. например, со многими 2D -симуляционными играми.

v1.4.0 A Virtual Window Manager Framework Python/Pygame. Copyright (C) 2018-2020 Thomas Leathers and Apportors

Нужна помощь? Для документации Смотрите каталог документов

Стразолоидная среда окончания – это бесплатное программное обеспечение: вы можете перераспределить его и/или изменить его в соответствии с условиями общей публичной лицензии GNU, опубликованной Фондом Free Software, либо версией 3 лицензии, либо (по варианту) любой более поздней версии.

Стразолоидная окно -рамка распределяется в надежде, что она будет полезна, но без какой -либо гарантии; без подразумеваемой гарантии товарной или пригодности для определенной цели. Смотрите общую публичную лицензию GNU для получения более подробной информации.

Вы должны были получить копию общей публичной лицензии GNU, а также Strazoloid Windowing Framework. Если нет, см. http://www.gnu.org/licenses/ Анкет

Все изображения и другой медиа-контент, если не указано иное, лицензированы по международной лицензии Creative Commons Attribution-Sharealike 4.0. Чтобы просмотреть…

Я на самом деле уже написал основную структуру Strazoloid, прежде чем работать над Zoxenpher, но это было значительно улучшено.

Запуск strazoloidwm достаточно просто:

import strazoloidwm as stz
desk=stz.desktop(800, 600, "This is the window title", pumpcall=event_test, resizable=1)
#init Framework
framesc=stz.framescape(desk)
#create new 'framex' object (virtual window)
testframe2=stz.framex(200, 100, "test2", pumpcall=event_test)
#add the frame (window) to our framescape instance.
framesc.add_frame(testframe2)
#hand over main thread to framescape instance, starting the window manager.
framesc.process()

Что Event_test Вы можете спросить? Что ж:

def event_test(frameobj, data=None):
    #note: you should make sure all non if-statement code is behind if statements. see comments on frame/desktop flags below.
    if frameobj.statflg==1:
        print(frameobj.name + " stat 1: init call")
    elif frameobj.statflg==2:
        print(frameobj.name + " stat 2: post-resize call")
    elif frameobj.statflg==3:
        print(frameobj.name + " stat 3: frame terminate call. type:")
        if frameobj.runflg==0:
            print("   run 0: wm quit call")
            print(frameobj.pid)
            print(frameobj.wo)
        if frameobj.runflg==2:#the desktop class should never set runflg=2
            print("   run 2: frame (window) close call")
            print(frameobj.pid)
            print(frameobj.wo)
    elif frameobj.statflg==4:
        print(frameobj.name + " stat 4: clickdown")
    elif frameobj.statflg==5:
        print(frameobj.name + " stat 5: clickup")
    elif frameobj.statflg==6:
        print(frameobj.name + " stat 6: keydown")
    elif frameobj.statflg==7:
        print(frameobj.name + " stat 7: keyup")
    elif frameobj.statflg==8:
        print(frameobj.name + " stat 8: desktop window resize")
    elif frameobj.statflg==9:
        print(frameobj.name + " stat 9: frame shade")
    elif frameobj.statflg==10:
                print(frameobj.name + " stat 10: frame unshade")

Что все проверяет statflg? Что ж. Вот как Strazoloidwm позволяет программе знать, какая причина была вызвана «Pumpcall» Frame/Desktop Object. Обратите внимание, что PumpCall может легко быть методом экземпляра класса.

Вы можете найти полную программу тестирования Здесь Анкет

Thomashespacefox/Zoxenpher

Клиент Python/Pygame Gopherspace, в стиле ретро -графического интерфейса.

Python & Pygame Gopher Client. v3.0.0.indev

питаться от:

  • Libgop Gopher Library v0.2
  • Strazoloid Virtual Window Manager Framework v1.4.0

Copyright (C) 2018-2020 Thomas Leathers and Apportors

Zoxenpher – это бесплатное программное обеспечение: вы можете перераспределить его и/или изменить его в соответствии с условиями общей публичной лицензии GNU, опубликованных Фондом Free Software, либо версией 3 лицензии, либо (по варианту) любой более поздней версии.

Zoxenpher распределен в надежде, что это будет полезно, но без какой -либо гарантии; без подразумеваемой гарантии товарной или пригодности для определенной цели. Смотрите общую публичную лицензию GNU для получения более подробной информации.

Вы должны были получить копию общей публичной лицензии GNU наряду с Zoxenpher. Если нет, см. http://www.gnu.org/licenses/ Анкет

Все изображения и другой медиа-контент, если не указано иное, лицензированы по международной лицензии Creative Commons Attribution-Sharealike 4.0. Чтобы просмотреть копию этой лицензии …

Сочетание пользовательской библиотеки синхронизатора/доступа к сусликам, а также некоторого кода, специфичного для реализации, и мощности Strazoloidwm, Zoxenpher-это аккуратный клиент Gopher, я смог поднять основные функции и продвигаться довольно быстро, как и многие из ворчащих работ уже был обработан Strazoloidwm.

В комплекте с закладками, навигацией по проведению окон, изображениям и даже поддержкой типа звука. Кроме того, использование Pygame позволило мне придать ему немного ретро-иска, который довольно хорошо подходит для протокола.

Оригинал: “https://dev.to/thomasthespacefox/pygame-gopherspace-and-window-managers-3ffi”