Фбс монтаж: Устройство фундамента ФБС, технологическая карта, план раскладки

Содержание

Как правильно укладывать фундаментные блоки: технология кладки ФБС

Фундаментные блоки (ФБС) отличает надежность и прочность, и при этом они имеют конкурентную цену. Основное предназначение данного материала – устройство стен подземных помещений, которые одновременно с тем играют роль фундамента. Применение блоков этого типа обеспечивает ряд неоспоримых преимуществ:

  • Укладка ФБС занимает минимум времени и не вызывает сложностей, так как блоки имеют строгую геометрическую форму.
  • Минимальная трудоемкость, если сравнивать с процессом заливки.
  • Фундаментные блоки данного типа выполняются по методу формирования тяжелого бетона, который дополнительно укрепляют арматурой из стали. Размер и структура элементов обеспечивают равномерное распределение нагрузки от сооружения на созданное основание. Оно способно выдерживать температуру от -70 до +50 градусов по Цельсию.
  • Допустима кладка фундаментных блоков (ФБС) во всех климатических регионах страны, в грунте любого типа.
  • Возможность проведения монтажных работ в любое время года. Материал и сооружение, созданное из него, не меняют технических параметров при перепадах температуры.

Инструкция по укладке фундаментых блоков

При монтаже фундамента из ФБС следует соблюдать технологию, так как лишь в этом случае гарантированы надежность и долговечность созданного основания. В ней нет ничего сложного. Первое, что нужно сделать, – правильно рассчитать необходимое количество материала и выбрать его тип. Для этого потребуется следующая информация:

  • тип грунта;
  • глубина залегания подземных вод, а также промерзания почвы;
  • размеры основания, которые выбраны в соответствии с габаритами будущего здания;
  • план подвала, в котором обозначены особенности ввода инженерно-бытовых сетей.

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

Количество материала вычисляется по следующей схеме: зная толщину, высоту и общий периметр будущей кладки, нужно рассчитать ее объем. Затем эту цифру следует разделить на кубатуру одного изделия, то есть блока. Специалисты рекомендуют использовать в работе блоки небольшого размера, так как они имеют меньший вес, а значит, не возникает сложности с их установкой.

После закупки материала приступаем непосредственно к установочным работам. Они выполняются поэтапно:

  • Подготовка участка, то есть разметка, земляные работы, освобождение траншей.
  • Устройство специальной песчаной подушки. На дно котлована засыпается слой толщиной 15 см из щебня и песка в соотношении 10:5. Для глинистых грунтов подушка должна быть трехслойной, ее оптимальная толщина – шестьдесят сантиметров. В данном случае в середину укладывается крупнофракционный наполнитель.
  • Создание основы. Она может быть выполнена из монолитной бетонной стяжки или из плоских плит.
  • Укладка блоков.
  • В некоторых случаях также требуются гидроизоляция и утепление.

Если вы не знаете, как правильно класть фундаментные блоки, просто соблюдайте следующие рекомендации:

  • Элементы размещаются с использованием грузоподъемной техники. Необходимо осуществлять контроль над правильностью их установки. Идеально, если за процессом будут следить 2-3 человека.
  • Первыми монтируются ФБС по крайним осям, то есть на углах будущего объекта. Их нужно соединить между собой с целью трассировки периметра.
  • Каждый блок, а точнее все его поверхности, обмазываются скрепляющим раствором.
  • Первый ряд целесообразно создавать из более плоских и габаритных изделий, так как в этом случае обеспечивается большая устойчивость.
  • Все блоки нужно выкладывать по уровню, недопустим «уход» больше чем на 2-3 градуса. Швы между элементами нужно заполнять скрепляющим составом.
  • Элементы устанавливаются по аналогичной схеме, что и кирпичная кладка, то есть со смещением. При этом угловые блоки размещают с перехлестом.
  • Слой раствора между рядами должен быть не менее 1,5 сантиметров.
  • Сначала создается фундамент для наружных стен, а после этого выполняется основание – для внутренних.
Поделиться ссылкой:

Производим и предлагаем продукцию:

Читайте также:

Все статьи

Монтаж фундаментных блоков


В качестве материала для сборных оснований служат фундаментные блоки – ФБС. Строительные конструктивные элементы представлены в широком ассортименте размеров, которые варьируются от 300 мм до 600 мм в высоту и от 880 до 2380 мм в длину при стандартном значении ширины 580 мм. Помимо фундаментных строительных блоков при возведении основания находят применение прочие конструкционные элементы, выполненные на основе железобетона, а именно: стаканы, балки, подушки, сваи и т. д.


Преимущества сборных фундаментов

Сборные типы оснований обладают целым рядом специфических достоинств, которыми определяется эффективность их применения на практике. Среди них:

  • высокая прочность блоков, изготовленных в заводских условиях;
  • широкий ассортимент размера модулей и конструкций, позволяющих минимизировать отходы и осуществлять строительство в любых масштабах с различной несущей способностью;
  • сокращение сроков строительства по сравнению с ленточными основаниями из монолитного железобетона, которым необходим минимальный срок для набирания прочности не менее 28 дней;
  • реализация строительных работ в любое время года.

К числу объективных недостатков оснований из фундаментных блоков относят такие факторы, как высокая стоимость изделий и необходимость применения в процессе их монтажа тяжелой спецтехники.

Технология монтажа блоков

Работы по строительству сборного основания на первом этапе не отличаются от аналогичных этапов строительства фундамента с заливкой бетона и представляют собой подготовку котлована с выемкой грунта. Перед укладкой модулей дно котлована подлежит зачистке с последующей укладкой подушки слоем от 150 мм до 200 мм и разметкой осей основания. В тех случаях, когда грунт удовлетворяет условиям устойчивости и прочности песчаная подушка может быть исключена. При строительстве зданий на слабых грунтах с высокой степенью пучинистости подушки для оснований формируются на основе железобетона в форме трапеций с целью обеспечения увеличенной площади опирания поверхностей блоков. На монтаж фундаментов для крупных объектов промышленного и гражданского назначения составляется специальная документация в виде технологической карты, которая включает в себя необходимые расчеты, конкретные виды операций и способы реализации работ с учетом использования подъемных механизмов и безопасности реализации строительного процесса.

Укладка ленточного основания из ФБС

Монтаж ленточного основания из готовых блоков следует начинать с правильного размещения угловых опор, а также элементов пересечения наружных и внутренних стен несущих конструкций. Установленные с использованием геодезических инструментов и приспособлений блоки служат в качестве ориентиров в плоскостях для реализации последующих монтажных работ, как в горизонтальном, так и в вертикальном направлениях. Блоки укладываются в ряды и соединяются между собой с помощью цементно-песчаного раствора. Швы тщательно заделываются. Монтаж блочного фундамент реализуется с перевязкой швов аналогично тому, как это делается при кирпичной кладке. При наличии просветов, которые образуются при укладке целых элементов, применяются доборные блоки меньшего размера или осуществляется заливка бетоном по схеме с установкой опалубки.


Формирование столбчатых оснований

Столбчатые фундаменты находят применение в том случае, если:

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

Часто на основе столбчатого основания возводятся каркасные строения из легких строительных материалов. Основание этой конструкции состоит из отдельно стоящих вертикальных опор, собираемых из бетонных блоков. При этом заглублений формируются в местах их установки достаточного размера для конструирования опоры в виде сборного столба. Первый блок подлежит укладке на песчаную подушку, а каждый последующий закрепляется посредством использования цементно-песчаного раствора. В том случае, если существует необходимость увеличения опорной площадки, ее формируют из бетона с установкой блоков в форме прямоугольника.


Возведение свайных фундаментов

Для проведения комплекса строительных работ по монтажу свайных работ применяется специальная техника в виде бурильных или копровых установок. При этом сама свая является железобетонным изделием, конструкционно имеющим один заостренный край. Устанавливаются опоры в заранее пробуренные скважины посредством формирования арматурного каркаса и последующей заливки бетонным раствором. Габариты свай и глубина их погружения являются расчетными значениями и приводятся в проектной документации.

Свайные типы оснований актуальны для неустойчивых типов грунтов, таких, как: торфяники, супесь, суглинки и т. д. По готовности впоследствии сваи соединяются воедино плитой или балками, образующими ростверк.


Правильный монтаж фундаментных блоков — технологическая карта

ФБС – это фундаментные блоки стен. Другое их название — блоки для постройки стен в подвалах. Практическое предназначение блоков ФБС для создания конструкций сооружений, которые имеют разное назначение и будут эксплуатироваться при частых воздействиях температуры воздуха в температурных рамках от -70°С и до +50°С.

С чего начинается работа?

ФБС – это бетонные блоки которые могут быть использованы в строительстве фундамента в разных климатических зонах и при любом типе грунта. Обычно работа начинается с отмера и разбивки осей предполагаемого фундамента. Разбивка фундамента начинается с того, что оси переносят на подготовленное основание для постройки фундамента.

Необходимо для этого:

 

  • натянуть осевые точки по обноске;
  • при помощи отвесов переносить точки пересечения этих осей на дне траншеи или котлована.

 

От точек, которые в итоге получились отмеряют размеры фундамента по проекту и закрепляют их при помощи штырей из металла так, чтобы шнур-причалка, который в это время натянут между ними, был не ближе а дальше на 2-3 мм до боковой грани ленты фундамента.

Начало монтажа фундамента

Монтаж фундаментных блоков начинается с укладывания их на основу. Чаще всего такой основой под фундамент может служить выравнивающий слой песка, или же, если предусмотрена проектом, то какая-то другая подложка. Подошва основания (а обычно это грунт) в траншее и котловане стараются выровнять отметкам, которые определены проектом.

На песчаных грунтах блоки фундамента необходимо укладывать непосредственно лишь на основание, которое выровненное. Если же грунты иные, то укладывают на сделанную песчаную подушку по толщине не меньше 5 – 10 см. Под основной подошвой фундамента не оставляют насыпной и разрыхлённый грунт. Длина и ширина основания из песка делается на 200—300 мм больше, чем размер самого фундамента, для того, чтобы в дальнейшем не было отвисания блоков с этой песчаной подушки.

Если же строительство фундамента будет с подвалом и ведется на сухих грунтах, то ФБС можно смонтировать непосредственно на само основание грунта, которое выравнивается песком. Такой вариант конструкции применяют также и при постройке фундамента дачного дома, который малозаглубленный даже без использования элементов фундамента в виде ленты.

Для того, чтобы увеличить несущую способность фундамента, фундаментные блоки размеры которых определяются зависимости от заранее просчитанной площади фундамента, с учетом толщины возводимых стен и перекрытий, необходимо монтировать на фундаментные подушки ФЛ, которые уложены предварительно.

Основным предназначением ФЛ является расширение подошвы фундамента (так называемое увеличение площади опоры).

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

Не допускается установка фундамента на основание, которое в снегу или в воде. Монтаж необходимо начинать с установки в местах, где стены пересекаются и по углам маячных блоков. После того как маячные блоки уложены, на их грани необходимо натянуть причалку и по ней уже расположить все промежуточные.

Контроль завершающего положения блоков

В ходе монтажа причалку переносят все дальше вверх на каждый очередной ряд. Завершающее положение блоков по плану необходимо проконтролировать по осевым рискам по верхним граням фундамента с помощью отвеса или теодолита.

Отвес нужно опускать с осевых проволок, которые натягивают по обноске. Все небольшие отклонения можно устранить, если блок передвинуть стальным ломом. Верх маячных блоков необходимо проверить нивелиром, а остальных блоков — визированием по блокам, установленным ранее или по причалке.

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

Монтаж должен быть выполнен со всеми возможными и необходимыми перевязками всех стен как внешних так и внутренних. Блоки стен фундамента обычно кладут на раствор и ведут перевязку вертикальных швов, где глубина даной перевязки должна быть не менее 0,4 высоты блока на грунте, который малосжимаемый и не менее 0,6 высоты блока на грунте, который сильносжимаемый, просадочный или набухающий. Перевязка вертикальных швов.

Готовя постель, поверхность блоков от мусора очищают и смачивают водой, а раствор подают и разравнивают лопаткой. Укладка блоков фундамента осуществляется на раствор размером не менее 2 см. Самое лучшее качество постели получится, когда раствор разравняется по рамке рейкой, которая гарантирует горизонтальность постели и максимально зафиксирует его толщину.

Все вертикальные стыки между блоками в ходе монтажа заполняются раствором с уплотнитедлем за методом штыкования. Блоки для стен подвала нужно выравнять по плоскости, которая смотрит в сторону помещения, а блоки внутренних подвальных стен — по одной из их плоскостей.

Если же длина блоков фундамента не будет кратна длине сторон здания, то между ними будут образовываться промежутки. Промежутки эти необходимо заполнить монолитными вставками (пломбами) или блоками, которые добираются. Между ними оставляют расстояние для прокладки канализационных труб и труб водоснабжения, электроснабжения, теплоснабжения и прочих.

После установки и контроля, кельмой необходимо срезать весь лишний раствор со швов расположенных горизонтально, а если раствора не хватит, то добавить его и по возможности уплотнить его.

Горизонтальные и вертикальные междублоковые швы должны заполнятся раствором, а с обеих сторон должны быть расшитыми. Стены сборного фундамента ленточной формы могут быть и потоньше стен здания, что строится, так как они обычно изготавливаются из материала, который более прочный, чем вся надземная часть здания, которое строится. При этом может быть допустимым свес стены здания. Свес не должен превышать 13 см.

Как укладывать фундамент из блоков ФБС своими руками: технология по шагам, схема

Прочные и надежные блоки ФБС привлекают строителей стойкостью и привлекательной ценой блочных материалов. Их прямое назначение – сооружение стен подземных помещений с одновременным выполнением задач фундамента.

Оглавление:

  1. Технология строительства основания по шагам
  2. Распространенные ошибки
  3. Советы

Ценность этих материалов объясняется следующими достоинствами:

  • высокой скоростью и простотой монтажа, которая обеспечивается элементарной геометрической формой изделий;
  • минимальной трудоемкостью по сравнению с выполнением заливки;
  • возможностью производить работы независимо от времени года, так как технология создания ФБС гарантирует высокое качество материала и отсутствие дефектов, возникающих в результате перепадов температур;
  • возможностью укладывать блоки своими руками людям, даже не имеющим специальных навыков, без предварительного учета нагрузок и характеристик здания.

Главные этапы возведения основания из ФБС

Один расчет придется сделать: необходимо узнать количественную потребность материала. Зная периметр, высоту и толщину, можно рассчитать общий объем кладки, после чего эту цифру разделить на кубатуру одного элемента. Целесообразнее использовать изделия небольшого размера, так как они гораздо удобнее в монтаже из-за их меньшего веса, чем крупные.

Нужна или подробная схема, или чертеж, где будет отражена информация о параметрах:

  • тип грунта;
  • глубина пролегания почвенных вод и промерзания грунта;
  • габариты основания в соответствии с размерами здания;
  • план подвального помещения с привязкой ввода инженерно-бытовых коммуникаций.

При покупке ФБС можно будет взять специальный блок с готовыми отверстиями. Если стоит задача сделать мелкозаглубленный ленточный фундамент для возведения хозяйственных построек типа бани или гаража, то достаточно использовать один ряд, вообще их может быть до 5.

Часто блоки выпускаются для конкретного вида и так и называются: для ленточного основания, столбчатого, колонного.

Пошаговая инструкция включает:

  • подготовку участка, которая заключается в разметке, копании и освобождении траншеи от мусора;
  • работы по организации песчаной подушки;
  • создание основы: либо из монолитной бетонной стяжки, либо из самих плоских плит;
  • укладку самих фундаментных блоков.

Иногда процесс завершается гидроизоляцией или утеплением.

Рассмотрим этапы:

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

2. Обустройство подушки. Вначале засыпается 10-15 см песчаного слоя или щебня с песком в соотношении 10:5. Если грунт глинистый, то подошву делают 3-х слойной, толщиной 60 см, прокладывая середину крупнофракционным наполнителем. Затем следуют процессы обильного увлажнения и трамбовки.

3. Создание основы для фундамента выполняется из тончайшего слоя бетона в 20–30 мм на уплотненном песке. Но вначале необходимо уложить кладочную сетку, а затем на нее медленно вылить раствор, прокалывая его арматурой для удаления воздуха. В случае жаркой погоды его смачивают для предохранения от потрескивания.

4. Блоки размещают посредством грузоподъемной техники и при наличии 2-3-х помощников, контролирующих правильную установку элементов. Но предварительно необходимо подготовить цементный состав, по плотности напоминающий густую сметану, в таком количестве, чтобы на каждую единицу основания приходилось 10-15 литров. Или приобрести специальный строительный клей: он предпочтительнее, так как ускоряет процесс, но дороже.

5. Скрепляющим раствором обмазываются все соприкасающиеся поверхности ФБС: и вертикальные, и горизонтальные. Последовательность укладки фундамента из блоков ФБС:

  • Монтаж начинается с элементов по крайним осям, на углах будущего сооружения, которые соединяют между собой для трассировки периметра.
  • Первый ряд делают из габаритных или более плоских изделий. Это обеспечивает гарантированную устойчивость.
  • Блоки выкладывают строго по уровню, заполняя швы между ними приготовленным составом.
  • Направление каждого ряда противоположно направлению предыдущему. То есть четные ряды, например, идут с севера на юг, а нечетные – с юга на север. Элементы монтируются по такой же схеме, как и кирпичная кладка, со смещением.
  • После того, как сделают фундамент для наружных стен, приступают к выполнению основания для внутренних.
  • Вертикальные швы верхних рядов приходятся на середину нижних. Угловые элементы размещают с перехлестом.
  • Между рядами наносится раствор толщиной в 1,5 см.

Распространенные ошибки при укладке блоков

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

ОшибкиЧто делать для их предотвращения
Некачественная организация песчаной подушкиУплотнение бетонной подушки необходимо выполнять тщательно, послойно, используя речной песок и смачивая его
Образование пустот и отверстий, не предусмотренных проектомПодобные бреши ведут к разрушению изделия. Поэтому эти щели заполняют бетоном или кирпичом, не нарушая целостность блока, а сверху нанести раствор. Но прежде всего нужно строго следовать инструкциям по возведению сооружений
Превышение угла по горизонтали более чем на 2°, а по вертикали – на 3°Это необходимо контролировать в течение всей работы специальными маячками, шнурами и уровнями
Сооружение фундамента без учета будущих коммунальных сетейЭтот вопрос решается на стадии закупки специальных для этого блоков

Некоторые рекомендации по укладке ФБС

Не следует пренебрегать гидроизоляцией, которая будет предохранять бетон от разрушения под действием попадающей влаги. Для этой защиты используется рубероидное покрытие или тщательное битумное промазывание основания со всех сторон. Для утепления выбирается экструдированный пенополистирол или пенопласт, которые наклеивают снаружи и внутри.

Вышерассмотренная технология применяется чаще всего для мелкозаглубленного фундамента из ФБС. Если материал нужно уложить в пучинистый грунт, будет правильно делать монтаж по такой схеме:

  • траншею копают на 0,4 м;
  • на дно укладывают подушку твердого щебня и песка толщиной 0,3 м;
  • монтируется арматура и сверху заливается раствор высотой 0,1 м;
  • после застывания стяжки размещают промазанные битумом блоки;
  • сверху делают еще один армирующий бетонный каркас.

Иногда в целях удешевления строительства легких сооружений без подвала и при необходимых почвенных условиях допускается «прерывистое» основание. Суть его заключается в размещении ФБС на расстоянии друг от друга в 0,7 м, но не больше. Экономия материалов при этом достигает 20 %. Но данная схема годится только для одно- и двухэтажных зданий.

Монтаж фундаментных блоков (фбс): укладка, установка

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

Готовим материалы и инструменты

Чтобы выполнить монтаж блоков фбс, потребуется позаботиться о следующем оснащении:

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

Предварительные мероприятия

Первый этап технологии укладки фбс заключается в разбивке осей.

Работу начинают с переноса фундаментных осей на дно заранее подготовленного котлована. Сначала натягивают осевые шнуры, потом с помощью обвесов либо инструментов с лазерным лучом места пересечений переносятся на дно траншеи. Они выполняют роль отправных точек при замерах проектных параметров фундаментной основы.

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

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

Когда укладка блоков фбс выполняется на песчаные подушки, то толщина их должна быть не менее пяти – десяти сантиметров.

Правила укладки блочного материала

Монтаж фундамента из блоков фбс рекомендуется выполнять в теплую погоду. Идеальный вариант – летний сезон.

Запрещается укладка блоков фбс на влажную поверхность. Если погодные условия неблагоприятные, то строительные работы следуют перенести.

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

Если запланировано возведение столбчатой фундаментной основы, то по правилам укладки блоков фбс предварительно создаются тумбы или подушки. Устраивают их в каждой яме по особой схеме. Дно приминается, потом засыпаются слои щебенки и песка, все тщательно трамбуется. Такую подушку рекомендуется пролить битумной мастикой.

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

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

Любое отклонение в ряду без проблем исправляется с помощью лома, которым блоки подвигаются в нужном направлении. Нивелиром проверяют соответствие чертежам, размещению по отношению к маякам. Если норма отклонения превышает разрешенные пределы, то блок извлекают и укладывают повторно.

Основные принципы устройства фундаментной основы

При укладке фундаментных блоков своими руками рекомендуется обратить внимание на сцепление камней, выполняемое цементным раствором. Он готовится перед началом проведения работ, и о его консистенции следует позаботиться заблаговременно, так как добавляемая в дальнейшем вода только ухудшит качество кладки.

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

Герметизировать шовные и стыковочные участки необходимо обязательно. Особенно его следует выполнять при обустройстве основы под гараж, подвальное помещение или цокольный этаж. С этой целью стыки наполняются раствором, содержащим в себе гидроизоляционные компоненты, существенно увеличивающие эксплуатационные характеристики и эксплуатационный период фундаментного основания.

Толщина растворного слоя определяется параметрами блочного материала. Промежуточные участки между камнями заполняются вставными элементами, отлитыми из бетонного раствора по арматурному каркасу.

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

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

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

Преимущества и недостатки блочной фундаментной основы

Как правильно укладывать блоки, мы выяснили. Остается разобраться с достоинствами и недостатками такого основания. Из отзывов потребителей становится ясно, что процесс имеет свои плюсы:

  • монтажные работы выполняются оперативно. Блоки представляют собой куски раскроенного монолитного основания, которые легко укладываются в необходимые по проекту формы;
  • основание отличается надежностью. Все сборные детали изготавливаются в заводских условиях, осуществляется контроль качества каждого производственного этапа. Пропорциональное соотношение составляющих сырье компонентов уточняется с учетом изготавливаемой разновидности материала;
  • универсальность камней. Из блоков фбс собирают основания любой сложности. Стройматериал применяется для обустройства высотных многоэтажных объектов и небольших сооружений. Ассортиментный ряд содержит изделия для ручной работы и блоки, который укладываются с применением механизмов и дополнительных работников;

  • устойчивость к стрессовым ситуациям. Блоки, содержащие специальные компоненты, используются для устройства оснований в почвенных составах с повышенным уровнем кислотности и предельной глубиной промерзания;
  • продуманность изготовления блоков. Камни имеют специальные петли, облегчающие процесс укладки. Блоки одной партии отлично подгоняются друг к другу, стыкуясь монтажными пазами.

Монтаж фундамента из блоков фбс отличается и негативными моментами:

  • высокая стоимость. Столбчатые фундаменты или сборные основания ленточного типа обходятся на тридцать – сорок процентов дороже, чем монолитные аналоги. Как говорится, за оперативность строительства приходится доплачивать;
  • гидроизоляционная защита. Уложенные блоки нуждаются в устройстве двойного гидроизоляционного слоя, так как сборная основа плохо сопротивляется влажной среде;
  • устройство утепления. Кладочные швы дополнительно защищают от промерзания, так как изменения температурного режима и чрезмерная влажность оказывают негативное воздействие на цементный раствор.

Заключение

Блоки фбс представляют собой практичный и выгодный материал для устройства фундаментного основания под объект любого предназначения. Чтобы понять, как установить блочные камни, особых навыков не требуется. Соблюдая требования технологической схемы и применяя качественные стройматериалы, можно оперативно возвести блочное фундаментное основание, значительно сэкономив при этом денежные средства и время.

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

Монтаж фундаментных блоков ФБС — Каменщик-инфо

ФБС — фундаментные блоки стен. Так же их называют блоки стен подвалов. Блоки ФБС предназначены для конструкций сооружений разного назначения, работающих при систематических воздействиях температуры не выше +50°С и не ниже -70°С.

Использование бетонных блоков ФБС при строительстве фундамента позволяет возводить здания в любых климатических зонах и на любых типах грунта. В отличие от монолитного фундамента, монтировать блоки ФБС можно в любую погоду а приступать к кладке стен можно сразу после окончания работ по его сооружению.

После разметки и копки котлована с недобором, производиться ручное выравнивание основания грунта до проектной отметки. На песчаных грунтах монтаж производится прямо на выровненном основании, на других грунтах, блоки укладывают на тщательно утрамбованную песчаную подушку, толщиной 5-10 см.

Под подошвой фундаментов нельзя оставлять насыпной или разрыхлённый грунт.

Ширину и длину песчаного основания делают на 20 — 30 см больше размеров фундаментов, чтобы предотвратить свисание блоков с песчаной подушки.

Разбивку плана начинают с перенесения осей на основание, подготовленное для устройства фундаментов. Для этого по обноске натягивают осевые и с помощью отвесов переносят точки их пересечения на дно котлованов и траншей. От этих точек отмеряют проектные размеры фундамента и закрепляют их металлическими штырями так, чтобы натянутый между ними шнур-причалка находился на 2-3 мм дальше боковой грани ленточного фундамента.

Монтаж фундамента начинают с установки маячных блоков по углам и в местах пересечения стен. После укладки маячных блоков на их грани натягивают причалку и по ней располагают все промежуточные блоки. По мере монтажа причалку переносят вверх на очередной ряд блоков. Окончательное положение блоков в плане контролируют по осевым рискам на верхней грани фундамента теодолитом или отвесом. Отвес опускают с осевых проволок, натянутых по обноске. Небольшие отклонения устраняют, передвигая блок ломом.

Блоки стен подвалов выравнивают по плоскости, обращённой в сторону помещения, блоки внутренних стен по одной их плоскостей.

Верх маячных блоков проверяют нивелиром, а остальных — по причалке или визированием по ранее установленным блокам.

Если блок уложен с отклонениями, превышающими допускаемые нормы, его поднимают краном, отводят в сторону, заново выравнивают основание и лишь после этого блок вновь укладывают на основание.

Монтаж бетонных блоков ведётся вразбежку, подобно кирпичной кладке, на цементный раствор, в четыре-пять рядов в высоту. Со всеми необходимыми и возможными перевязками внутренних и внешних стен.

Фундаментные стеновые блоки кладут на раствор с перевязкой вертикальных швов, глубина которой должна быть не менее 0,4 высоты блока при малосжимаемых грунтах и не менее высоты блока при сильносжимаемых, просадочных и набухающих грунтах.

Укладка фундаментных блоков осуществляется на раствор толщиной 2 см. Лучшее качество шва получается, когда раствор разравнивают рейкой по рамке, которая обеспечивает горизонтальность постели и фиксирует его толщину. Вертикальные и горизонтальные швы между блоками должны быть заполнены раствором и расшиты с двух сторон.

Вертикальные стыки между блоками по мере их монтажа заполняют раствором с уплотнением методом штыкования. Если длина фундаментных блоков не является кратной длине сторон здания, то промежутки заполняют доборными блоками или монолитными вставками — пломба. Между блоками должно быть оставлено расстояние для прокладки труб водоснабжения и канализации, теплоснабжения, электроснабжения и др.

Стены сборных ленточных фундаментов могут быть тоньше стен самого здания, так как они изготовлены из более прочного материала, чем надземная часть.

При этом допустимый свес стены здания не должен превышать 130 мм.

Для увеличения несущей способности фундамента, бетонные блоки ФБС монтируют на предварительно уложенные фундаментные подушки ФЛ. Основное предназначение ФЛ — расширение подошвы фундамента (увеличение площади опоры).

Перед строповкой блоков надо убедиться, что кран находится на безопасном расстоянии от края котлована, что его опоры (гусеницы, колеса, аутригеры) расположены за пределами призмы обрушения.

Установка фундаментов на покрытые водой или снегом основания не допускается.

Скачать — Типовая технологическая карта на установку фундаментных блоков.

Допуски при монтаже крупноблочных ленточных фундаментов в соответствии с требованиями СНиП III-16-73

  1. Смещение осей фундаментных блоков и блоков стен фундаментов относительно разбивочных осей ± 10 мм.
  2. Отклонение отметок верхних опорных поверхностей элементов фундаментов — 10 мм.
  3. Смещение осей или граней стеновых блоков в нижнем сечении относительно разбивочных осей или геометрических осей нижеустановленных конструкций ± 5мм.

Маркировка, вес и размеры блоков ФБС

Марка фундаментного блока Вес, т Размер фундаментного блока, мм
ФБС 24-3-6т 0,975 2380x300x580
ФБС 24-4-6т 1,3 2380x400x580
ФБС 24-5-6т 1,63 2380x500x580
ФБС 24-6-6т 1,96 2380x600x580
ФБС 12-3-6т 0,49 1180x300x580
ФБС 12-4-6т 0,64 1180x400x580
ФБС 12-5-6т 0,814 1180x500x580
ФБС 12-6-6т 0,98 1180x600x580
ФБС 9-3-6т 0,326 880x300x580
ФБС 9-4-6т 0,468 880x400x580
ФБС 9-5-6т 0,51 880x500x580
ФБС 9-6-6т 0,7 880x600x580
ФБС 12-4-3т 0,31 1180x400x280
ФБС 12-5-3т 0,38 1180x500x280
ФБС 12-6-3т 0,46 1180x600x290

Подготовка и монтаж фундамента Просмотров: 33570

Монтаж блоков ФБС | За Молотком!

Автор zamolotkom.ru На чтение 6 мин. Просмотров 175 Опубликовано

Для закладки фундамента наиболее часто применяют бетонные блоки ФБС(фундаментный блок стеновой). Они отличаются высокой прочностью и надежностью. В западных странах эти монолиты ушли в прошлое не потому, что качество оказалось неподходящим, а просто они уступили место более современным технологиям. Но в случае если требуется сократить сроки строительства, такой материал подойдет, несмотря на то, что технологии не новы. На постройку фундамента при этом уйдет всего несколько дней, и при этом можно быть уверенным в прочности и долговечности сооружения.

В настоящее время ни один вид строительных материалов не даст таких быстрых результатов. Кроме того, укладка отличается простым исполнением. Для нее необязателен большой опыт строительства. При этом не нужны сложные схемы, расчеты, справочники. Бетонные материалы имеют довольно большие габариты. И нужно, выбрав тип фундамента, и зная размер блока, провести несложные подсчеты. Более того, их использование упрощает работу тем, что в других случаях требуется укладка арматуры, её привязка.

Плюсы

Блоки ФБС — это массивные балки прямоугольного сечения. Их марки отличаются по размерам. Для производства арматурная сетка не применяется. Есть разновидности, имеющие металлические петли для монтажа. Но есть варианты без петель.

[rd_lists_ctn style=»rd_list_2″][rd_list i_color=»#59d600″ title=»Малые затраты времени на работу» icon=»mi-plus»][/rd_list][rd_list i_color=»#59d600″ title=»Простая установка» icon=»mi-plus»][/rd_list][rd_list i_color=»#59d600″ title=»Устойчивость к нагрузкам и различным средам» icon=»mi-plus»][/rd_list][/rd_lists_ctn]

Минусы

[rd_lists_ctn style=»rd_list_2″][rd_list i_color=»#dd0000″ title=»Высокая стоимость» icon=»mi-minus»][/rd_list][rd_list i_color=»#dd0000″ title=»Установка гидроизоляции» icon=»mi-minus»][/rd_list][/rd_lists_ctn]

Рассчитываем число блоков

Расчет простой — зная объем кладки, нужно разделить его на объем одного блока. Размеры блоков со стандартной величиной одинаковые у всех производителей. Высота всех марок блоков — 58 см. Рельефы торцов позволяют легко укладывать раствор. Перед этим сначала нужно выложить основание, которое называется подушкой и состоит из смеси песка и гравия. Сама кладка выполняется по типу кирпичной, только блоки намного тяжелее.

Подготовка к укладке

Монтаж фундамента не отличается сложностью, но нужно учитывать тип грунта. На выбранном участке проводят расчистку от мусора, верхний слой почвы с травой снимают. Нужно обязательно определить тип грунта, так как это влияет на дальнейшую подготовку. Основные замеры — глубина подземных вод, точка промерзания почвы.

На глинистых почвах сначала роют канавы под блоки. На дно кладется подушка из трех слоев. Верхний и нижний слой из песка, средний — щебень. Каждый слой нужно утрамбовать. Сверху устанавливается бетонная подушка трапециевидной формы. Она служит для укрепления и увеличения прочности фундамента. Это называется нулевым рядом.

В случае песчаного грунта на дно вырытой траншеи подушку из гравия и песка не делают. Сам грунт обладает требуемыми качествами. Но на дне траншеи сооружают опалубку для заливки бетонной подушки толщиной в 10 см. После того как она высохнет, можно класть блоки.

Укладка

Для монтажа каждый блок имеет металлические петли для подъема и перемещения.

Начинают укладку с углов площадки в месте пересечения стен. Блоки кладут на раствор, толщина его должна быть одинакова и по вертикальным швам также. В целом принцип работы подобен обычной кирпичной кладке. По правилам строительства по углам строения не должны совпадать швы соседних блоков. Для поддержания уровня строители рекомендуют ставить маяки во время кладки. Они покажут ровность линий.

Поскольку фундамент — ответственная часть здания, то необходимо тщательно заделывать пустоты между блоками. Наличие пустот может нарушить связь между элементами фундамента и снизить сопротивление нагрузкам.

Завершающие работы

После укладки блоков дальнейшие действия зависят от типа грунта. Любая почва, кроме песчаной, упрощает работу. На блоки наносят слой гидроизоляции из жидкой резины. После её застывания пространство фундамента поэтапно засыпают песком. Его сыпят порциями и трамбуют. Для небольших фундаментов засыпку можно делать вручную. Но габаритные площади требуют присутствия строительной техники.

mherrmann / fbs-tutorial: Учебник по созданию графических интерфейсов Python / Qt с помощью fbs

В этом руководстве показано, как с помощью fbs создать простой графический интерфейс Python и связанный установщик:

Вы можете следовать этому руководству в Windows, Mac или Linux. Вам нужен Python 3.5 или 3.6.

Настройка

Создать виртуальную среду в текущем каталоге:

Активировать виртуальную среду:

  # В Mac / Linux:
источник venv / bin / активировать
# В Windows:
вызовите venv \ scripts \ activate.летучая мышь
  

В оставшейся части руководства предполагается, что виртуальная среда активна.

Установите необходимые библиотеки (в первую очередь, fbs и PyQt5 ):

  pip install fbs PyQt5 == 5.9.2
  

(Если это приводит к ошибкам, сначала попробуйте pip install wheel .)

Вы также можете использовать Qt для Python вместо PyQt. Для этого просто напишите PySide2 вместо PyQt5 в этом руководстве.Для вышеуказанного используйте pip install PySide2 == 5.12.0 .

Начать проект

Выполните следующую команду, чтобы запустить новый проект fbs:

Это задает вам несколько вопросов. Например, вы можете использовать Tutorial в качестве приложения. имя и ваше имя как автора.

Команда создает новую папку с именем src / в вашем текущем каталоге. Эта папка содержит минимальную конфигурацию для простого приложения PyQt.

Запустите приложение

Чтобы запустить базовое приложение PyQt из исходного кода, выполните следующую команду:

Это показывает (правда, не очень интересное) окно.Скриншоты на Windows / Mac / Ubuntu:

Исходный код примера приложения

Давайте теперь посмотрим на исходный код сгенерированного приложения PyQt. Это в SRC / основной / Python / main.py :

 из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext
из PyQt5.QtWidgets импортировать QMainWindow

import sys

если __name__ == '__main__':
    appctxt = ApplicationContext () # 1. Создание экземпляра ApplicationContext
    окно = QMainWindow ()
    окно.изменить размер (250, 150)
    window.show ()
    exit_code = appctxt.app.exec () # 2. Вызов appctxt.app.exec ()
    sys.exit (код_выхода) 

Важные шаги отмечены как комментарии. Они единственный шаблон это требуется. В середине кода вы можете видеть, что окно создан, изменен размер и затем показан.

Зависание приложения

Мы хотим превратить исходный код нашего приложения в автономный исполняемый файл, который может запускаться на компьютерах ваших пользователей. В контексте приложений Python это процесс называется «замораживанием».

Используйте следующую команду, чтобы превратить исходный код приложения в автономный исполняемый файл:

Это создает папку target / Tutorial . Вы можете скопировать этот каталог в любой другой компьютер (с той же ОС, что и ваш) и запустите приложение на нем! Разве это не классно?

Создание установщика

Настольные приложения обычно распространяются с помощью установщика. В Windows это будет исполняемый файл TutorialSetup.exe . На Mac — образы подключаемых дисков, например Tutorial.dmg обычно используются. В Linux файлы .deb, распространены в Ubuntu, .rpm в Fedora / CentOS и .pkg.tar.xz на Arch.

fbs позволяет вам сгенерировать каждый из вышеперечисленных пакетов с помощью команды:

В зависимости от вашей операционной системы для этого может потребоваться сначала установить некоторые инструменты. Пожалуйста, прочтите инструкции для конкретной ОС.

Установщик Windows

Прежде чем использовать команду установщика в Windows, установите NSIS и добавьте его установочный каталог в переменную среды PATH .

Установщик создается по адресу target / TutorialSetup.exe . Это позволяет вашим пользователям выбирать каталог установки и добавляет ваше приложение в меню «Пуск». Это также создает запись в списке установленных программ Windows. Ваши пользователи могут использовать это, чтобы удалите свое приложение. На следующих снимках экрана показаны эти шаги в действии:

Программа установки для Mac

На Mac программа установки создает файл target / Tutorial.dmg .Когда ваши пользователи открывают его, они видят следующий объем:

Чтобы установить приложение, пользователи просто перетащите его значок в папку Applications папка (также отображается в томе).

Установщик Linux

В Linux для работы программы установки требуется наличие fpm. Вы можете, например, следовать эти инструкции для установить его.

В зависимости от вашего дистрибутива Linux, fbs создает установщик по адресу цель / Tutorial.deb , ...pkg.tar.xz или ... об / мин. Ваши пользователи могут использовать эти файлы, чтобы установить приложение с помощью соответствующего диспетчера пакетов.

Более интересный пример

Теперь мы создадим более мощный пример. Вот как это выглядит на Окна:

Когда вы нажимаете кнопку в окне, новая цитата выбирается из Интернет и отображается выше.

Прежде чем вы сможете запустить этот пример, вам необходимо установить Python запрашивает библиотеку.Сделать это, введите следующую команду:

Исходный код нового приложения состоит из двух файлов:

Скопируйте первый поверх существующего файла в src / main / python / , а последний в новый каталог src / main / resources / base / . Если вы используете PySide вместо PyQt, вам нужно заменить все вхождения PyQt5 в main.py по PySide2 .

После того, как вы выполнили эти шаги, вы можете выполнить fbs запустить (или fbs freeze и т. Д.) как прежде.

Новое приложение использует следующий код для получения цитат из Интернета:

 def _get_quote ():
    вернуть requests.get ('https://build-system.fman.io/quote') .text 

Вы можете видеть, что он использует библиотеку запросов и , которую мы только что установили выше. Чувствовать свободно открывать build-system.fman.io/quote в браузер, чтобы почувствовать, что он возвращает. Его данные поступают из общедоступная база данных.

Приложение выполняет те же основные действия, что и раньше. Он создает приложение context и заканчивается вызовом appctxt.app.exec_ () :

 appctxt = ApplicationContext ()
...
exit_code = appctxt.app.exec_ ()
sys.exit (код_выхода) 

Разница в том, что происходит между:

 таблица стилей = appctxt.get_resource ('styles.qss')
appctxt.app.setStyleSheet (открыть (таблица стилей) .read ())
window = MainWindow ()
window.show () 

В первой строке используется get_resource (...) от до получить путь к styles.qss . Это файл QSS, Qt’s эквивалент CSS. Следующая строка считывает его содержимое и устанавливает их как таблица стилей контекста приложения .приложение .

fbs гарантирует, что get_resource (...) работает как при запуске из источника (т.е. во время fbs run ) и при запуске скомпилированной формы вашего приложения. В бывшем В этом случае возвращаемый путь находится в src / main / resources . В последнем он будет в каталог установки вашего приложения. fbs обрабатывает соответствующие детали прозрачно.

В предпоследней строке создается экземпляр MainWindow . Этот новый класс устанавливает текст поле для цитаты и кнопка.При нажатии кнопки изменяется содержимое текстового поля с использованием _get_quote () выше. Вы можете найти полный код в main.py .

Как уже упоминалось, вы можете использовать fbs run для запуска нового приложения. Но вот что действительно круто: вы также можете сделать fbs freeze и fbs installer для распространить на другие компьютеры. fbs включает зависимость запросов и styles.qss файл автоматически.

Сводка

fbs позволяет использовать Python и Qt для создания настольных приложений для Windows, Mac и Linux.Он может создавать установщики для вашего приложения и автоматически обрабатывает упаковка сторонних библиотек и файлов данных. Эти вещи обычно занимают недели, чтобы выяснить. Вместо этого fbs предоставит их вам за считанные минуты.

Куда идти дальше

Руководство

fbs объясняет технические основу шагов в этом руководстве. Прочтите, чтобы узнать больше о fbs требуемая структура каталогов, управление зависимостями, обработка файлов данных, пользовательские команды сборки, API и многое другое.

Если вы раньше не использовали PyQt: это библиотека, которая позволила нам в приведенном выше примеры использования Qt (GUI framework) из Python.вклад fbs не в объединить Python и Qt. Чтобы упростить упаковку и развертывание Приложения на основе PyQt для компьютеров ваших пользователей. Для введения в PyQt см. здесь.

Не стесняйтесь поделиться ссылкой на это руководство! Если вы еще не на фбс список рассылки и хотите получать уведомления по мере его развития, подпишите здесь.

Раскройте весь потенциал вашего приложения

Часто задаваемые вопросы

Что я получаю при покупке?

Вы получите URL-адрес пакета Python, который сможете установить. с pip в секундах.

Это подписка?

Нет. Это единовременный платеж, который позволяет вам использовать Pro навсегда.

Могут ли несколько разработчиков в моей компании использовать одну и ту же версию Pro лицензия?

Да, при условии, что все они являются сотрудниками вашей компании.

Есть ли функциональная разница между двумя Pro версии?

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

Могу ли я использовать Pro для нескольких приложений?

да.

Как часто я могу скачивать Pro?

Ссылку для скачивания Pro можно открыть 30 раз за месяц.

Могу я сделать резервную копию?

Конечно. Только не делись этим с людьми за пределами твоего организация.

Что означает «Без ограничений GPL»?

Когда вы используете fbs, его лицензия GPL обычно требует, чтобы вы также сделайте свой собственный код с открытым исходным кодом под лицензией GPL. Покупка Pro отменяет это требование. Обычно это очень важно для коммерческих проектов.

Как мне получить счет?

Щелкните ссылку Создать счет в электронное письмо с подтверждением.

У меня есть еще один вопрос.

Без проблем. Просто напишите мне на и я вернусь тебе.

Упаковка приложений PyQt5 с помощью fbs — Распространение кроссплатформенных приложений с графическим интерфейсом пользователя с помощью системы сборки fman

fbs — это кроссплатформенная система упаковки PyQt5, которая поддерживает создание настольных приложений для Windows, Mac и Linux (Ubuntu, Fedora и Arch).Построенный на основе PyInstaller , он скрывает некоторые неровности и определяет стандартную структуру проекта, которая позволяет полностью автоматизировать процесс сборки. Включенный API ресурсов особенно полезен, упрощая работу с внешними файлами данных, изображениями или сторонними библиотеками — распространенной проблемой при объединении приложений.

Это руководство проведет вас через шаги создания приложений PyQt5 с использованием fbs с нуля и для преобразования существующих проектов в систему.Если ваше приложение ориентировано на несколько платформ, на него определенно стоит обратить внимание.

Если вы нетерпеливы, вы можете скачать установщики Moonsweeper непосредственно для Windows, MacOS или Linux (Ubuntu).

fbs под лицензией GPL. Это означает, что вы можете использовать систему fbs бесплатно в пакетах, распространяемых с GPL. Для коммерческих (или других не-GPL) пакетов вы должны купить коммерческую лицензию. Актуальную информацию см. На странице лицензирования fbs.

fbs построен на основе PyInstaller. Вы также можете использовать PyInstaller непосредственно для упаковки приложений, см. Нашу упаковку приложений PyQt5 и PySide2 для Windows с помощью учебника PyInstaller.

Требования для установки

fbs работает из коробки как с PyQt PyQt5 , так и с Qt для Python PySide2 . Единственное другое требование — это PyInstaller , который сам обрабатывает упаковку. Вы можете установить их в виртуальной среде (или в виртуальной среде ваших приложений), чтобы поддерживать чистоту вашей среды.

fbs поддерживает только Python версий 3.5 и 3.6

трепать
  python3 -m venv fbsenv
  

После создания активируйте виртуальную среду, запустив ее из командной строки —

трепать
  # В Mac / Linux:
источник fbsenv / bin / активировать

# В Windows:
вызовите fbsenv \ scripts \ activate.bat
  

Наконец, установите необходимые библиотеки. Для PyQt5 вы должны использовать —

питон
  pip3 установить fbs PyQt5 PyInstaller == 3.4
  

Или для Qt для Python (PySide2) —

питон
  pip3 установить fbs PySide2 PyInstaller == 3.4
  

fbs устанавливает инструмент командной строки fbs на ваш путь, который обеспечивает доступ ко всем командам управления fbs . Чтобы увидеть полный список доступных команд, запустите fbs .

трепать
  martin @ Martins-Laptop testapp $ fbs
использование: fbs [-h]
           {startproject, run, freeze, installer, sign_installer, repo,
           загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
           ...

fbs

позиционные аргументы:
  {startproject, run, freeze, installer, sign_installer, repo,
  загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
    startproject Запустить новый проект в текущем каталоге
    запустить Запустите приложение из источника
    freeze Скомпилируйте свой код в автономный исполняемый файл
    установщик Создайте установщик для вашего приложения
    sign_installer Подписать установщик, чтобы операционная система пользователя доверяла ему
    репо Создавать файлы для автоматических обновлений
    загрузить Загрузите установщик и репозиторий в fbs.ш
    выпустить версию Bump и запустить очистить, заморозить, ..., загрузить
    test Выполнять автоматизированные тесты
    clean Удалить предыдущие выходы сборки
    buildvm Создайте виртуальную машину Linux. Например: buildvm ubuntu
    runvm Запустите виртуальную машину Linux. Например: runvm ubuntu
    gengpgkey Сгенерировать ключ GPG для подписи кода Linux
    зарегистрироваться Создайте учетную запись для загрузки файлов
    войти Сохраните данные своей учетной записи в secret.json
    init_licensing Генерация открытых / закрытых ключей для лицензирования

необязательные аргументы:
  -h, --help показать это справочное сообщение и выйти
  

Теперь вы готовы начать упаковывать приложения с fbs .

Запуск приложения

Если вы запускаете приложение PyQt5 с нуля, вы можете использовать команду управления fbs startproject для создания полной, работающей и упаковываемой заглушки приложения в текущей папке. Это дает вам возможность тестировать (и продолжать тестирование) пакетируемость вашего приложения по мере его разработки, а не оставлять это до конца.

Команда предложит вам ответить на несколько вопросов, позволяя указать детали вашего приложения.Эти значения будут записаны в исходный код и конфигурацию вашего приложения. Простое приложение будет создано в папке src / в текущем каталоге.

трепать
  martin @ Martins-Laptop ~ $ fbs startproject
Название приложения [MyApp]: HelloWorld
Автор [Мартин]: Мартин Фицпатрик
Идентификатор пакета Mac (например, com.martin.helloworld, необязательно):
  

Если у вас уже есть собственное работающее приложение PyQt5, вам необходимо: а) использовать созданное приложение в качестве ориентира для преобразования вашего в ту же структуру, или б) создать новое приложение с помощью startproject и перенести код.

Запуск вашего нового проекта

Вы можете запустить это новое приложение с помощью следующей команды fbs в той же папке, из которой вы запустили startproject .

Если все работает, это должно показать вам небольшое пустое окошко с заголовком вашего приложения — интересно, а?

Приложение Hello World в Windows

Приложение Hello World на Mac

Приложение Hello World в Linux

Структура приложения

Команда startproject создает необходимую структуру папок для приложения fbs PyQt5.Это включает в себя src / build , который содержит настройки сборки для вашего пакета, main / icons, , который содержит значки приложений, и src / python для источника.

трепать
 .
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── иконки
        │ ├── Icon.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.PNG
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        └── питон
            └── main.py

  

Ваше простое приложение PyQt5 сгенерировано в src / main / python / main.py и представляет собой полный рабочий пример, который вы можете использовать для создания собственного кода.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext
из PyQt5.QtWidgets импортировать QMainWindow

import sys

класс AppContext (ApplicationContext): # 1. Подкласс ApplicationContext
    def run (self): # 2. Реализуйте run ()
        окно = QMainWindow ()
        version = self.build_settings ['версия']
        window.setWindowTitle ("HelloWorld v" + версия)
        window.resize (250, 150)
        window.show ()
        вернуть себя.app.exec_ () # 3. Завершите run () этой строкой

если __name__ == '__main__':
    appctxt = AppContext () # 4. Создайте экземпляр подкласса
    exit_code = appctxt.run () # 5. Вызов run ()
    sys.exit (код_выхода)
  

Если вы создавали приложения PyQt5, прежде чем вы заметите, что создание приложения с использованием fbs вводит новую концепцию — ApplicationContext .

Контекст приложения

При создании приложений PyQt5 обычно используется ряд компонентов или ресурсов, которые используются во всем приложении.Они обычно хранятся в QMainWindow или как глобальные переменные, которые могут стать немного беспорядочными по мере роста вашего приложения. ApplicationContext обеспечивает центральное место для инициализации и хранения этих компонентов, а также обеспечивает доступ к некоторым основным функциям fbs .

Объект ApplicationContext также создает и содержит ссылку на глобальный объект QApplication — доступный в ApplicationContext.app .Каждое приложение Qt должно иметь одно (и только одно) QApplication для хранения цикла событий и основных настроек. Без fbs вы обычно определяете это в основе вашего скрипта и вызываете .exec () , чтобы запустить цикл обработки событий.

Без fbs это выглядело бы примерно так —

питон
  если __name__ == '__main__':
    app = QApplication ()
    w = MyCustomWindow ()
    app.exec_ ()
  

Эквивалент с fbs будет —

питон
  если __name__ == '__main__':
    ctx = ApplicationContext ()
    w = MyCustomWindow ()
    ctx.app.exec_ ()
  

Если вы хотите создать свою собственную инициализацию `QApplication`, вы можете перезаписать свойство` .app` в своем подклассе `ApplicationContext`, используя` cached_property` (см. Ниже).

Этот базовый пример очевиден для подражания. Однако, как только вы начнете добавлять пользовательские стили и переводы в свое приложение, инициализация может немного увеличиться. Чтобы все было хорошо структурировано, fbs рекомендует создать метод .run в вашем ApplicationContext .

Этот метод должен обрабатывать настройку вашего приложения, такую ​​как создание и отображение окна, наконец, запуск цикла обработки событий на объекте .app . Этот последний шаг выполняется путем вызова self.app.exec_ () в конце метода.

питон
  класс AppContext (ApplicationContext):
    def run (self):
        ...
        вернуть self.app.exec_ ()
  

По мере усложнения инициализации вы можете для ясности разбить подразделы на отдельные методы, например —

питон
  класс AppContext (ApplicationContext):
    def run (self):
        себя.setup_fonts ()
        self.setup_styles ()
        self.setup_translations ()
        вернуть self.app.exec_ ()

    def setup_fonts (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_styles (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_translations (самостоятельно):
        # ...сделай что-нибудь ...

  

При выполнении будет вызван метод `.run ()` и запустится цикл обработки событий. Выполнение продолжается в этом цикле событий до тех пор, пока приложение не будет завершено, после чего ваш метод `.run ()` вернется (с соответствующим кодом выхода).

Создание реального приложения

Простое приложение не так много, поэтому ниже мы рассмотрим нечто более полное — приложение Moonsweeper из моих 15-минутных приложений. Обновленный исходный код доступен для загрузки ниже.

Источник Moonsweeper (fbs) PyQt5

Источник Лунного Сапера (fbs) PySide2

Здесь описаны только изменения, необходимые для преобразования Moonsweeper в fbs . Если вы хотите увидеть, как работает сам Moonsweeper, см. Оригинальную статью о приложении.Пользовательские значки приложений были созданы с использованием иконок Freepik.

Проект имеет ту же базовую структуру, что и приложение-заглушка, которое мы создали выше.

питон
 .
├── README.md
├── requirements.txt
├── screenshot-minesweeper1.jpg
├── screenshot-minesweeper2.jpg
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── Installer.nsi
        ├── иконки
        │ ├── Значок.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.png
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        ├── питон
        │ ├── __init__.py
        │ └── main.ру
        └── ресурсы
            ├── база
            │ └── изображения
            │ ├── bomb.png
            │ ├── bug.png
            │ ├── clock-select.png
            │ ├── cross.png
            │ ├── flag.png
            │ ├── plus.png
            │ ├── rocket.png
            │ ├── смайлик-lol.png
            │ └── смайлик.png
            └── mac
                └── Содержание
                    └── Info.plist
  

Файл src / build / settings / base.json хранит основные сведения о приложении, включая точку входа для запуска приложения с запуском fbs или после его упаковки.

json
  {
    "app_name": "Лунный Сапер",
    "author": "Мартин Фицпатрик",
    "main_module": "src / main / python / main.py",
    "версия": "0.0.0"
}
  

Точка входа сценария находится в основе src / main / python / main.py . Это создает объект AppContext и вызывает .run () для запуска приложения.

питон
  если __name__ == '__main__':
    appctxt = AppContext ()
    exit_code = appctxt.run ()
    sys.exit (код_выхода)
  

Контекст приложения определяет метод .run () для обработки инициализации. В данном случае это состоит из создания и отображения главного окна, а затем запуска цикла обработки событий.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext, \
    cached_property


класс AppContext (ApplicationContext):
    def run (self):
        себя.main_window.show ()
        вернуть self.app.exec_ ()

    @cached_property
    def main_window (сам):
        return MainWindow (self) # Передать контекст окну.

    # ... отрезать ...
  

Декоратор

cached_property

Метод .run () обращается к self.main_window . Вы заметите, что этот метод заключен в декоратор fbs @cached_property . Этот декоратор превращает метод в свойство (как декоратор Python @property ) и кэширует возвращаемое значение.

При первом обращении к свойству выполняется метод и кэшируется возвращаемое значение. При последующих вызовах кэшированное значение возвращается напрямую, ничего не выполняя. Это также имеет побочный эффект — откладывание создания этих объектов до тех пор, пока они не понадобятся.

Вы можете использовать @cached_property для определения каждого компонента приложения (окна, панели инструментов, соединения с базой данных или других ресурсов). Однако у вас нет и для использования @cached_property — в качестве альтернативы вы можете объявить все свойства в своем ApplicationContext.__init__ , как показано ниже.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext

класс AppContext (ApplicationContext):

    def __init __ (self, * args, ** kwargs):
        super (AppContext, self) .__ init __ (* args, ** kwargs)

        self.window = Окно ()

    def run (self):
        self.window.show ()
        вернуть self.app.exec_ ()

  

Доступ к ресурсам с помощью

.get_resource

Приложениям обычно требуются дополнительные файлы данных помимо исходного кода — например, значки файлов, изображения, стили (Qt’s .qss файлов) или документации. Вы также можете связать библиотеки или двоичные файлы для конкретной платформы. Для упрощения этого fbs определяет структуру папок и метод доступа, которые без проблем работают как в разрабатываемых, так и в распределенных версиях.

Папка верхнего уровня resources / должна содержать папку base плюс любую комбинацию других папок, показанных ниже. Папка base содержит файлы, общие для всех платформ, в то время как папки для конкретных платформ могут использоваться для любых файлов, специфичных для данной ОС.

трепать
  base / # для файлов, необходимых для всех ОС
windows / # для файлов, требуемых только в Windows
mac / # "" "" "Mac
linux / # "" "" "Linux
arch / # "" "" "Arch Linux
fedora / # "" "" "Debian Linux
ubuntu / # "" "" "Ubuntu Linux
  

Размещение файлов в нужном месте для загрузки из распределенного приложения на всех платформах обычно является одним из самых сложных моментов при распространении приложений PyQt.Очень удобно, что fbs сделает это за вас.

Для упрощения загрузки ресурсов из папки resources / в ваши приложения fbs предоставляет метод ApplicationContext.get_resource () . Этот метод принимает имя файла, который можно найти где-нибудь в папке resources / , и возвращает абсолютный путь к этому файлу. Вы можете использовать этот возвращенный абсолютный путь, чтобы открыть файл как обычно.

питон
  из fbs_runtime.application_context.PyQt5 импорт ApplicationContext, cached_property


класс AppContext (ApplicationContext):

    # ... отрезать ...

    @cached_property
    def img_bomb (сам):
        вернуть QImage (self.get_resource ('images / bug.png'))

    @cached_property
    def img_flag (сам):
        вернуть QImage (self.get_resource ('images / flag.png'))

    @cached_property
    def img_start (сам):
        вернуть QImage (self.get_resource ('images / rocket.png'))

    @cached_property
    def img_clock (сам):
        вернуть QImage (self.get_resource ('images / clock-select.png'))

    @cached_property
    def status_icons (сам):
        возвращение {
            STATUS_READY: QIcon (self.get_resource ("images / plus.png")),
            STATUS_PLAYING: QIcon (self.get_resource ("images / smiley.png")),
            STATUS_FAILED: QIcon (self.get_resource ("images / cross.png")),
            STATUS_SUCCESS: QIcon (self.get_resource ("images / smiley-lol.png"))
        }

    # ... отрезать ...
  

В нашем приложении Moonsweeper выше у нас есть файл изображения бомбы , доступный по адресу src / main / resources / base / images / bug.jpg . Вызывая ctx.get_resource ('images / bug.png') , мы получаем абсолютный путь к этому файлу изображения в файловой системе, что позволяет нам открыть файл в нашем приложении.

Если файл не существует, вместо него будет вызвана `FileNotFoundError`.

Удобство этого метода заключается в том, что он прозрачно обрабатывает папки платформы в src / main / resources , давая приоритет файлам, зависящим от ОС. Например, если тот же файл также присутствует в src / main / resources / mac / images / bug.jpg , и мы назвали ctx.get_resource ('images / bug.jpg') и получили версию файла для Mac.

Дополнительно get_resource работает как при запуске из исходного кода, так и при запуске замороженной или установленной версии вашего приложения. Если ваши ресурсы / загружаются правильно локально, вы можете быть уверены, что они будут правильно загружаться в ваших распределенных приложениях.

Использование

ApplicationContext из приложения

Как показано выше, наш объект ApplicationContext имеет кэшированные свойства для загрузки и возврата ресурсов.Чтобы позволить нам получить к ним доступ из нашего QMainWindow , мы можем передать контекст и сохранить ссылку на него в нашем окне __init__ .

питон
  класс MainWindow (QMainWindow):
    def __init __ (self, ctx):
        super (MainWindow, self) .__ init __ ()

        self.ctx = ctx # Сохранение ссылки на контекст для ресурсов и т. д.

# ... отрезать ...
  

Теперь, когда у нас есть доступ к контексту через self.ctx , мы можем использовать его в любом месте, где мы хотим ссылаться на эти внешние ресурсы.

питон
  l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_bomb))
        l.setAlignment (Qt.AlignRight | Qt.AlignVCenter)
        hb.addWidget (l)

# ... отрезать ...

        l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_clock))
        l.setAlignment (Qt.AlignLeft | Qt.AlignVCenter)
        hb.addWidget (l)

  

При первом доступе к self.ctx.img_bomb файл будет загружен, QImage будет создан и возвращен.При последующих вызовах мы будем получать изображение из кеша.

питон
  def init_map (самостоятельно):
        # Добавить позиции на карту
        для x в диапазоне (0, self.b_size):
            для y в диапазоне (0, self.b_size):
                w = Pos (x, y, self.ctx.img_flag, self.ctx.img_start, self.ctx.img_bomb)
                self.grid.addWidget (ш, у, х)
                # Подключить сигнал для обработки расширения.
                w.clicked.connect (self.trigger_start)
                w.expandable.connect (сам.expand_reveal)
                w.ohno.connect (self.game_over)

# ... отрезать ...

        self.button.setIcon (self.ctx.status_icons [STATUS_PLAYING])

# ... отрезать ...

    def update_status (сам, статус):
        self.status = статус
        self.button.setIcon (self.ctx.status_icons [self.status])

  

Это все изменения, необходимые для того, чтобы приложение Moonsweeper могло быть упаковано с fbs . Если вы откроете исходную папку, вы сможете запустить ее, как раньше.

Если это сработает, вы готовы перейти к замораживанию и встраиванию установщика.

Зависание приложения

Зависание — это процесс превращения приложения Python в автономный исполняемый файл, который может работать на компьютере другого пользователя. Используйте следующую команду, чтобы превратить исходный код приложения в автономный исполняемый файл:

Результирующий исполняемый файл зависит от платформы, на которой вы заморозили — исполняемый файл будет работать только в той ОС, на которой вы его создали (например.г. исполняемый файл, созданный в Windows, будет работать на другом компьютере с Windows, но не на Mac).

  • Windows создаст исполняемый файл .exe в папке target /
  • MacOS X создаст пакет приложений .app в target / .app
  • Linux создаст исполняемый файл в папке target /

В Windows вам может потребоваться установить Windows 10 SDK, хотя fbs предложит вам, если это так.

Электронная книга (PDF, ePub) и полный исходный код

Для поддержки разработчиков в [[countryRegion]] я даю [[localizedDiscount [couponCode]]]% скидка на все книги и курсы.

[[activeDiscount.description]] Я даю [[activeDiscount.discount]]% скидка на все книги и курсы.

Создание установщика

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

.

Вы должны заморозить ваше приложение сначала затем создать установщик.

Установщик Windows

Установщик Windows позволяет пользователям выбирать каталог для установки исполняемого файла и добавляет ваше приложение в меню «Пуск» пользователя. Приложение также добавляется к установленным программам, что позволяет пользователям удалять его.

Перед созданием установщиков в Windows вам необходимо установить NSIS и убедиться, что его установочный каталог находится в вашем PATH .Затем вы можете создать установщик, используя —

Установщик Windows будет создан по адресу target / Setup.exe .

Установщик Windows для Moonsweeper

Программа установки Windows NSIS для Moonsweeper

Программа установки для Mac

Нет дополнительных шагов для создания установщика MacOS. Просто запустите команду fbs

На Mac эта команда сгенерирует образ диска с адресом target / .dmg . Этот образ диска будет содержать комплект приложений и ярлык для папки «Приложения».Когда ваши пользователи открывают его, они могут перетащить приложение в папку «Приложения», чтобы установить его.

Загрузите комплект Moonsweeper .dmg здесь

Программа установки MacOS для Moonsweeper

Образ диска Mac для Moonsweeper

Установщик Linux

Для сборки установщиков в Linux вам необходимо установить инструмент Ruby Effing package management! — используйте руководство по установке, чтобы настроить его. После этого вы можете использовать стандартную команду для создания файла пакета Linux.

Полученный пакет будет создан в папке target / . В зависимости от вашей платформы файл пакета будет называться .deb , .pkg.tar.xz или .rpm . Ваши пользователи могут установить этот файл с помощью своего диспетчера пакетов.

Установщик Ubuntu для Moonsweeper

Упаковка приложений PyQt5 с помощью fbs — Распространение кроссплатформенных приложений с графическим интерфейсом пользователя с помощью системы сборки fman

fbs — это кроссплатформенная система упаковки PyQt5, которая поддерживает создание настольных приложений для Windows, Mac и Linux (Ubuntu, Fedora и Arch).Построенный на основе PyInstaller , он скрывает некоторые неровности и определяет стандартную структуру проекта, которая позволяет полностью автоматизировать процесс сборки. Включенный API ресурсов особенно полезен, упрощая работу с внешними файлами данных, изображениями или сторонними библиотеками — распространенной проблемой при объединении приложений.

Это руководство проведет вас через шаги создания приложений PyQt5 с использованием fbs с нуля и для преобразования существующих проектов в систему.Если ваше приложение ориентировано на несколько платформ, на него определенно стоит обратить внимание.

Если вы нетерпеливы, вы можете скачать установщики Moonsweeper непосредственно для Windows, MacOS или Linux (Ubuntu).

fbs под лицензией GPL. Это означает, что вы можете использовать систему fbs бесплатно в пакетах, распространяемых с GPL. Для коммерческих (или других не-GPL) пакетов вы должны купить коммерческую лицензию. Актуальную информацию см. На странице лицензирования fbs.

fbs построен на основе PyInstaller. Вы также можете использовать PyInstaller непосредственно для упаковки приложений, см. Нашу упаковку приложений PyQt5 и PySide2 для Windows с помощью учебника PyInstaller.

Требования для установки

fbs работает из коробки как с PyQt PyQt5 , так и с Qt для Python PySide2 . Единственное другое требование — это PyInstaller , который сам обрабатывает упаковку. Вы можете установить их в виртуальной среде (или в виртуальной среде ваших приложений), чтобы поддерживать чистоту вашей среды.

fbs поддерживает только Python версий 3.5 и 3.6

трепать
  python3 -m venv fbsenv
  

После создания активируйте виртуальную среду, запустив ее из командной строки —

трепать
  # В Mac / Linux:
источник fbsenv / bin / активировать

# В Windows:
вызовите fbsenv \ scripts \ activate.bat
  

Наконец, установите необходимые библиотеки. Для PyQt5 вы должны использовать —

питон
  pip3 установить fbs PyQt5 PyInstaller == 3.4
  

Или для Qt для Python (PySide2) —

питон
  pip3 установить fbs PySide2 PyInstaller == 3.4
  

fbs устанавливает инструмент командной строки fbs на ваш путь, который обеспечивает доступ ко всем командам управления fbs . Чтобы увидеть полный список доступных команд, запустите fbs .

трепать
  martin @ Martins-Laptop testapp $ fbs
использование: fbs [-h]
           {startproject, run, freeze, installer, sign_installer, repo,
           загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
           ...

fbs

позиционные аргументы:
  {startproject, run, freeze, installer, sign_installer, repo,
  загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
    startproject Запустить новый проект в текущем каталоге
    запустить Запустите приложение из источника
    freeze Скомпилируйте свой код в автономный исполняемый файл
    установщик Создайте установщик для вашего приложения
    sign_installer Подписать установщик, чтобы операционная система пользователя доверяла ему
    репо Создавать файлы для автоматических обновлений
    загрузить Загрузите установщик и репозиторий в fbs.ш
    выпустить версию Bump и запустить очистить, заморозить, ..., загрузить
    test Выполнять автоматизированные тесты
    clean Удалить предыдущие выходы сборки
    buildvm Создайте виртуальную машину Linux. Например: buildvm ubuntu
    runvm Запустите виртуальную машину Linux. Например: runvm ubuntu
    gengpgkey Сгенерировать ключ GPG для подписи кода Linux
    зарегистрироваться Создайте учетную запись для загрузки файлов
    войти Сохраните данные своей учетной записи в secret.json
    init_licensing Генерация открытых / закрытых ключей для лицензирования

необязательные аргументы:
  -h, --help показать это справочное сообщение и выйти
  

Теперь вы готовы начать упаковывать приложения с fbs .

Запуск приложения

Если вы запускаете приложение PyQt5 с нуля, вы можете использовать команду управления fbs startproject для создания полной, работающей и упаковываемой заглушки приложения в текущей папке. Это дает вам возможность тестировать (и продолжать тестирование) пакетируемость вашего приложения по мере его разработки, а не оставлять это до конца.

Команда предложит вам ответить на несколько вопросов, позволяя указать детали вашего приложения.Эти значения будут записаны в исходный код и конфигурацию вашего приложения. Простое приложение будет создано в папке src / в текущем каталоге.

трепать
  martin @ Martins-Laptop ~ $ fbs startproject
Название приложения [MyApp]: HelloWorld
Автор [Мартин]: Мартин Фицпатрик
Идентификатор пакета Mac (например, com.martin.helloworld, необязательно):
  

Если у вас уже есть собственное работающее приложение PyQt5, вам необходимо: а) использовать созданное приложение в качестве ориентира для преобразования вашего в ту же структуру, или б) создать новое приложение с помощью startproject и перенести код.

Запуск вашего нового проекта

Вы можете запустить это новое приложение с помощью следующей команды fbs в той же папке, из которой вы запустили startproject .

Если все работает, это должно показать вам небольшое пустое окошко с заголовком вашего приложения — интересно, а?

Приложение Hello World в Windows

Приложение Hello World на Mac

Приложение Hello World в Linux

Структура приложения

Команда startproject создает необходимую структуру папок для приложения fbs PyQt5.Это включает в себя src / build , который содержит настройки сборки для вашего пакета, main / icons, , который содержит значки приложений, и src / python для источника.

трепать
 .
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── иконки
        │ ├── Icon.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.PNG
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        └── питон
            └── main.py

  

Ваше простое приложение PyQt5 сгенерировано в src / main / python / main.py и представляет собой полный рабочий пример, который вы можете использовать для создания собственного кода.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext
из PyQt5.QtWidgets импортировать QMainWindow

import sys

класс AppContext (ApplicationContext): # 1. Подкласс ApplicationContext
    def run (self): # 2. Реализуйте run ()
        окно = QMainWindow ()
        version = self.build_settings ['версия']
        window.setWindowTitle ("HelloWorld v" + версия)
        window.resize (250, 150)
        window.show ()
        вернуть себя.app.exec_ () # 3. Завершите run () этой строкой

если __name__ == '__main__':
    appctxt = AppContext () # 4. Создайте экземпляр подкласса
    exit_code = appctxt.run () # 5. Вызов run ()
    sys.exit (код_выхода)
  

Если вы создавали приложения PyQt5, прежде чем вы заметите, что создание приложения с использованием fbs вводит новую концепцию — ApplicationContext .

Контекст приложения

При создании приложений PyQt5 обычно используется ряд компонентов или ресурсов, которые используются во всем приложении.Они обычно хранятся в QMainWindow или как глобальные переменные, которые могут стать немного беспорядочными по мере роста вашего приложения. ApplicationContext обеспечивает центральное место для инициализации и хранения этих компонентов, а также обеспечивает доступ к некоторым основным функциям fbs .

Объект ApplicationContext также создает и содержит ссылку на глобальный объект QApplication — доступный в ApplicationContext.app .Каждое приложение Qt должно иметь одно (и только одно) QApplication для хранения цикла событий и основных настроек. Без fbs вы обычно определяете это в основе вашего скрипта и вызываете .exec () , чтобы запустить цикл обработки событий.

Без fbs это выглядело бы примерно так —

питон
  если __name__ == '__main__':
    app = QApplication ()
    w = MyCustomWindow ()
    app.exec_ ()
  

Эквивалент с fbs будет —

питон
  если __name__ == '__main__':
    ctx = ApplicationContext ()
    w = MyCustomWindow ()
    ctx.app.exec_ ()
  

Если вы хотите создать свою собственную инициализацию `QApplication`, вы можете перезаписать свойство` .app` в своем подклассе `ApplicationContext`, используя` cached_property` (см. Ниже).

Этот базовый пример очевиден для подражания. Однако, как только вы начнете добавлять пользовательские стили и переводы в свое приложение, инициализация может немного увеличиться. Чтобы все было хорошо структурировано, fbs рекомендует создать метод .run в вашем ApplicationContext .

Этот метод должен обрабатывать настройку вашего приложения, такую ​​как создание и отображение окна, наконец, запуск цикла обработки событий на объекте .app . Этот последний шаг выполняется путем вызова self.app.exec_ () в конце метода.

питон
  класс AppContext (ApplicationContext):
    def run (self):
        ...
        вернуть self.app.exec_ ()
  

По мере усложнения инициализации вы можете для ясности разбить подразделы на отдельные методы, например —

питон
  класс AppContext (ApplicationContext):
    def run (self):
        себя.setup_fonts ()
        self.setup_styles ()
        self.setup_translations ()
        вернуть self.app.exec_ ()

    def setup_fonts (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_styles (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_translations (самостоятельно):
        # ...сделай что-нибудь ...

  

При выполнении будет вызван метод `.run ()` и запустится цикл обработки событий. Выполнение продолжается в этом цикле событий до тех пор, пока приложение не будет завершено, после чего ваш метод `.run ()` вернется (с соответствующим кодом выхода).

Создание реального приложения

Простое приложение не так много, поэтому ниже мы рассмотрим нечто более полное — приложение Moonsweeper из моих 15-минутных приложений. Обновленный исходный код доступен для загрузки ниже.

Источник Moonsweeper (fbs) PyQt5

Источник Лунного Сапера (fbs) PySide2

Здесь описаны только изменения, необходимые для преобразования Moonsweeper в fbs . Если вы хотите увидеть, как работает сам Moonsweeper, см. Оригинальную статью о приложении.Пользовательские значки приложений были созданы с использованием иконок Freepik.

Проект имеет ту же базовую структуру, что и приложение-заглушка, которое мы создали выше.

питон
 .
├── README.md
├── requirements.txt
├── screenshot-minesweeper1.jpg
├── screenshot-minesweeper2.jpg
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── Installer.nsi
        ├── иконки
        │ ├── Значок.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.png
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        ├── питон
        │ ├── __init__.py
        │ └── main.ру
        └── ресурсы
            ├── база
            │ └── изображения
            │ ├── bomb.png
            │ ├── bug.png
            │ ├── clock-select.png
            │ ├── cross.png
            │ ├── flag.png
            │ ├── plus.png
            │ ├── rocket.png
            │ ├── смайлик-lol.png
            │ └── смайлик.png
            └── mac
                └── Содержание
                    └── Info.plist
  

Файл src / build / settings / base.json хранит основные сведения о приложении, включая точку входа для запуска приложения с запуском fbs или после его упаковки.

json
  {
    "app_name": "Лунный Сапер",
    "author": "Мартин Фицпатрик",
    "main_module": "src / main / python / main.py",
    "версия": "0.0.0"
}
  

Точка входа сценария находится в основе src / main / python / main.py . Это создает объект AppContext и вызывает .run () для запуска приложения.

питон
  если __name__ == '__main__':
    appctxt = AppContext ()
    exit_code = appctxt.run ()
    sys.exit (код_выхода)
  

Контекст приложения определяет метод .run () для обработки инициализации. В данном случае это состоит из создания и отображения главного окна, а затем запуска цикла обработки событий.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext, \
    cached_property


класс AppContext (ApplicationContext):
    def run (self):
        себя.main_window.show ()
        вернуть self.app.exec_ ()

    @cached_property
    def main_window (сам):
        return MainWindow (self) # Передать контекст окну.

    # ... отрезать ...
  

Декоратор

cached_property

Метод .run () обращается к self.main_window . Вы заметите, что этот метод заключен в декоратор fbs @cached_property . Этот декоратор превращает метод в свойство (как декоратор Python @property ) и кэширует возвращаемое значение.

При первом обращении к свойству выполняется метод и кэшируется возвращаемое значение. При последующих вызовах кэшированное значение возвращается напрямую, ничего не выполняя. Это также имеет побочный эффект — откладывание создания этих объектов до тех пор, пока они не понадобятся.

Вы можете использовать @cached_property для определения каждого компонента приложения (окна, панели инструментов, соединения с базой данных или других ресурсов). Однако у вас нет и для использования @cached_property — в качестве альтернативы вы можете объявить все свойства в своем ApplicationContext.__init__ , как показано ниже.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext

класс AppContext (ApplicationContext):

    def __init __ (self, * args, ** kwargs):
        super (AppContext, self) .__ init __ (* args, ** kwargs)

        self.window = Окно ()

    def run (self):
        self.window.show ()
        вернуть self.app.exec_ ()

  

Доступ к ресурсам с помощью

.get_resource

Приложениям обычно требуются дополнительные файлы данных помимо исходного кода — например, значки файлов, изображения, стили (Qt’s .qss файлов) или документации. Вы также можете связать библиотеки или двоичные файлы для конкретной платформы. Для упрощения этого fbs определяет структуру папок и метод доступа, которые без проблем работают как в разрабатываемых, так и в распределенных версиях.

Папка верхнего уровня resources / должна содержать папку base плюс любую комбинацию других папок, показанных ниже. Папка base содержит файлы, общие для всех платформ, в то время как папки для конкретных платформ могут использоваться для любых файлов, специфичных для данной ОС.

трепать
  base / # для файлов, необходимых для всех ОС
windows / # для файлов, требуемых только в Windows
mac / # "" "" "Mac
linux / # "" "" "Linux
arch / # "" "" "Arch Linux
fedora / # "" "" "Debian Linux
ubuntu / # "" "" "Ubuntu Linux
  

Размещение файлов в нужном месте для загрузки из распределенного приложения на всех платформах обычно является одним из самых сложных моментов при распространении приложений PyQt.Очень удобно, что fbs сделает это за вас.

Для упрощения загрузки ресурсов из папки resources / в ваши приложения fbs предоставляет метод ApplicationContext.get_resource () . Этот метод принимает имя файла, который можно найти где-нибудь в папке resources / , и возвращает абсолютный путь к этому файлу. Вы можете использовать этот возвращенный абсолютный путь, чтобы открыть файл как обычно.

питон
  из fbs_runtime.application_context.PyQt5 импорт ApplicationContext, cached_property


класс AppContext (ApplicationContext):

    # ... отрезать ...

    @cached_property
    def img_bomb (сам):
        вернуть QImage (self.get_resource ('images / bug.png'))

    @cached_property
    def img_flag (сам):
        вернуть QImage (self.get_resource ('images / flag.png'))

    @cached_property
    def img_start (сам):
        вернуть QImage (self.get_resource ('images / rocket.png'))

    @cached_property
    def img_clock (сам):
        вернуть QImage (self.get_resource ('images / clock-select.png'))

    @cached_property
    def status_icons (сам):
        возвращение {
            STATUS_READY: QIcon (self.get_resource ("images / plus.png")),
            STATUS_PLAYING: QIcon (self.get_resource ("images / smiley.png")),
            STATUS_FAILED: QIcon (self.get_resource ("images / cross.png")),
            STATUS_SUCCESS: QIcon (self.get_resource ("images / smiley-lol.png"))
        }

    # ... отрезать ...
  

В нашем приложении Moonsweeper выше у нас есть файл изображения бомбы , доступный по адресу src / main / resources / base / images / bug.jpg . Вызывая ctx.get_resource ('images / bug.png') , мы получаем абсолютный путь к этому файлу изображения в файловой системе, что позволяет нам открыть файл в нашем приложении.

Если файл не существует, вместо него будет вызвана `FileNotFoundError`.

Удобство этого метода заключается в том, что он прозрачно обрабатывает папки платформы в src / main / resources , давая приоритет файлам, зависящим от ОС. Например, если тот же файл также присутствует в src / main / resources / mac / images / bug.jpg , и мы назвали ctx.get_resource ('images / bug.jpg') и получили версию файла для Mac.

Дополнительно get_resource работает как при запуске из исходного кода, так и при запуске замороженной или установленной версии вашего приложения. Если ваши ресурсы / загружаются правильно локально, вы можете быть уверены, что они будут правильно загружаться в ваших распределенных приложениях.

Использование

ApplicationContext из приложения

Как показано выше, наш объект ApplicationContext имеет кэшированные свойства для загрузки и возврата ресурсов.Чтобы позволить нам получить к ним доступ из нашего QMainWindow , мы можем передать контекст и сохранить ссылку на него в нашем окне __init__ .

питон
  класс MainWindow (QMainWindow):
    def __init __ (self, ctx):
        super (MainWindow, self) .__ init __ ()

        self.ctx = ctx # Сохранение ссылки на контекст для ресурсов и т. д.

# ... отрезать ...
  

Теперь, когда у нас есть доступ к контексту через self.ctx , мы можем использовать его в любом месте, где мы хотим ссылаться на эти внешние ресурсы.

питон
  l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_bomb))
        l.setAlignment (Qt.AlignRight | Qt.AlignVCenter)
        hb.addWidget (l)

# ... отрезать ...

        l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_clock))
        l.setAlignment (Qt.AlignLeft | Qt.AlignVCenter)
        hb.addWidget (l)

  

При первом доступе к self.ctx.img_bomb файл будет загружен, QImage будет создан и возвращен.При последующих вызовах мы будем получать изображение из кеша.

питон
  def init_map (самостоятельно):
        # Добавить позиции на карту
        для x в диапазоне (0, self.b_size):
            для y в диапазоне (0, self.b_size):
                w = Pos (x, y, self.ctx.img_flag, self.ctx.img_start, self.ctx.img_bomb)
                self.grid.addWidget (ш, у, х)
                # Подключить сигнал для обработки расширения.
                w.clicked.connect (self.trigger_start)
                w.expandable.connect (сам.expand_reveal)
                w.ohno.connect (self.game_over)

# ... отрезать ...

        self.button.setIcon (self.ctx.status_icons [STATUS_PLAYING])

# ... отрезать ...

    def update_status (сам, статус):
        self.status = статус
        self.button.setIcon (self.ctx.status_icons [self.status])

  

Это все изменения, необходимые для того, чтобы приложение Moonsweeper могло быть упаковано с fbs . Если вы откроете исходную папку, вы сможете запустить ее, как раньше.

Если это сработает, вы готовы перейти к замораживанию и встраиванию установщика.

Зависание приложения

Зависание — это процесс превращения приложения Python в автономный исполняемый файл, который может работать на компьютере другого пользователя. Используйте следующую команду, чтобы превратить исходный код приложения в автономный исполняемый файл:

Результирующий исполняемый файл зависит от платформы, на которой вы заморозили — исполняемый файл будет работать только в той ОС, на которой вы его создали (например.г. исполняемый файл, созданный в Windows, будет работать на другом компьютере с Windows, но не на Mac).

  • Windows создаст исполняемый файл .exe в папке target /
  • MacOS X создаст пакет приложений .app в target / .app
  • Linux создаст исполняемый файл в папке target /

В Windows вам может потребоваться установить Windows 10 SDK, хотя fbs предложит вам, если это так.

Электронная книга (PDF, ePub) и полный исходный код

Для поддержки разработчиков в [[countryRegion]] я даю [[localizedDiscount [couponCode]]]% скидка на все книги и курсы.

[[activeDiscount.description]] Я даю [[activeDiscount.discount]]% скидка на все книги и курсы.

Создание установщика

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

.

Вы должны заморозить ваше приложение сначала затем создать установщик.

Установщик Windows

Установщик Windows позволяет пользователям выбирать каталог для установки исполняемого файла и добавляет ваше приложение в меню «Пуск» пользователя. Приложение также добавляется к установленным программам, что позволяет пользователям удалять его.

Перед созданием установщиков в Windows вам необходимо установить NSIS и убедиться, что его установочный каталог находится в вашем PATH .Затем вы можете создать установщик, используя —

Установщик Windows будет создан по адресу target / Setup.exe .

Установщик Windows для Moonsweeper

Программа установки Windows NSIS для Moonsweeper

Программа установки для Mac

Нет дополнительных шагов для создания установщика MacOS. Просто запустите команду fbs

На Mac эта команда сгенерирует образ диска с адресом target / .dmg . Этот образ диска будет содержать комплект приложений и ярлык для папки «Приложения».Когда ваши пользователи открывают его, они могут перетащить приложение в папку «Приложения», чтобы установить его.

Загрузите комплект Moonsweeper .dmg здесь

Программа установки MacOS для Moonsweeper

Образ диска Mac для Moonsweeper

Установщик Linux

Для сборки установщиков в Linux вам необходимо установить инструмент Ruby Effing package management! — используйте руководство по установке, чтобы настроить его. После этого вы можете использовать стандартную команду для создания файла пакета Linux.

Полученный пакет будет создан в папке target / . В зависимости от вашей платформы файл пакета будет называться .deb , .pkg.tar.xz или .rpm . Ваши пользователи могут установить этот файл с помощью своего диспетчера пакетов.

Установщик Ubuntu для Moonsweeper

Упаковка приложений PyQt5 с помощью fbs — Распространение кроссплатформенных приложений с графическим интерфейсом пользователя с помощью системы сборки fman

fbs — это кроссплатформенная система упаковки PyQt5, которая поддерживает создание настольных приложений для Windows, Mac и Linux (Ubuntu, Fedora и Arch).Построенный на основе PyInstaller , он скрывает некоторые неровности и определяет стандартную структуру проекта, которая позволяет полностью автоматизировать процесс сборки. Включенный API ресурсов особенно полезен, упрощая работу с внешними файлами данных, изображениями или сторонними библиотеками — распространенной проблемой при объединении приложений.

Это руководство проведет вас через шаги создания приложений PyQt5 с использованием fbs с нуля и для преобразования существующих проектов в систему.Если ваше приложение ориентировано на несколько платформ, на него определенно стоит обратить внимание.

Если вы нетерпеливы, вы можете скачать установщики Moonsweeper непосредственно для Windows, MacOS или Linux (Ubuntu).

fbs под лицензией GPL. Это означает, что вы можете использовать систему fbs бесплатно в пакетах, распространяемых с GPL. Для коммерческих (или других не-GPL) пакетов вы должны купить коммерческую лицензию. Актуальную информацию см. На странице лицензирования fbs.

fbs построен на основе PyInstaller. Вы также можете использовать PyInstaller непосредственно для упаковки приложений, см. Нашу упаковку приложений PyQt5 и PySide2 для Windows с помощью учебника PyInstaller.

Требования для установки

fbs работает из коробки как с PyQt PyQt5 , так и с Qt для Python PySide2 . Единственное другое требование — это PyInstaller , который сам обрабатывает упаковку. Вы можете установить их в виртуальной среде (или в виртуальной среде ваших приложений), чтобы поддерживать чистоту вашей среды.

fbs поддерживает только Python версий 3.5 и 3.6

трепать
  python3 -m venv fbsenv
  

После создания активируйте виртуальную среду, запустив ее из командной строки —

трепать
  # В Mac / Linux:
источник fbsenv / bin / активировать

# В Windows:
вызовите fbsenv \ scripts \ activate.bat
  

Наконец, установите необходимые библиотеки. Для PyQt5 вы должны использовать —

питон
  pip3 установить fbs PyQt5 PyInstaller == 3.4
  

Или для Qt для Python (PySide2) —

питон
  pip3 установить fbs PySide2 PyInstaller == 3.4
  

fbs устанавливает инструмент командной строки fbs на ваш путь, который обеспечивает доступ ко всем командам управления fbs . Чтобы увидеть полный список доступных команд, запустите fbs .

трепать
  martin @ Martins-Laptop testapp $ fbs
использование: fbs [-h]
           {startproject, run, freeze, installer, sign_installer, repo,
           загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
           ...

fbs

позиционные аргументы:
  {startproject, run, freeze, installer, sign_installer, repo,
  загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
    startproject Запустить новый проект в текущем каталоге
    запустить Запустите приложение из источника
    freeze Скомпилируйте свой код в автономный исполняемый файл
    установщик Создайте установщик для вашего приложения
    sign_installer Подписать установщик, чтобы операционная система пользователя доверяла ему
    репо Создавать файлы для автоматических обновлений
    загрузить Загрузите установщик и репозиторий в fbs.ш
    выпустить версию Bump и запустить очистить, заморозить, ..., загрузить
    test Выполнять автоматизированные тесты
    clean Удалить предыдущие выходы сборки
    buildvm Создайте виртуальную машину Linux. Например: buildvm ubuntu
    runvm Запустите виртуальную машину Linux. Например: runvm ubuntu
    gengpgkey Сгенерировать ключ GPG для подписи кода Linux
    зарегистрироваться Создайте учетную запись для загрузки файлов
    войти Сохраните данные своей учетной записи в secret.json
    init_licensing Генерация открытых / закрытых ключей для лицензирования

необязательные аргументы:
  -h, --help показать это справочное сообщение и выйти
  

Теперь вы готовы начать упаковывать приложения с fbs .

Запуск приложения

Если вы запускаете приложение PyQt5 с нуля, вы можете использовать команду управления fbs startproject для создания полной, работающей и упаковываемой заглушки приложения в текущей папке. Это дает вам возможность тестировать (и продолжать тестирование) пакетируемость вашего приложения по мере его разработки, а не оставлять это до конца.

Команда предложит вам ответить на несколько вопросов, позволяя указать детали вашего приложения.Эти значения будут записаны в исходный код и конфигурацию вашего приложения. Простое приложение будет создано в папке src / в текущем каталоге.

трепать
  martin @ Martins-Laptop ~ $ fbs startproject
Название приложения [MyApp]: HelloWorld
Автор [Мартин]: Мартин Фицпатрик
Идентификатор пакета Mac (например, com.martin.helloworld, необязательно):
  

Если у вас уже есть собственное работающее приложение PyQt5, вам необходимо: а) использовать созданное приложение в качестве ориентира для преобразования вашего в ту же структуру, или б) создать новое приложение с помощью startproject и перенести код.

Запуск вашего нового проекта

Вы можете запустить это новое приложение с помощью следующей команды fbs в той же папке, из которой вы запустили startproject .

Если все работает, это должно показать вам небольшое пустое окошко с заголовком вашего приложения — интересно, а?

Приложение Hello World в Windows

Приложение Hello World на Mac

Приложение Hello World в Linux

Структура приложения

Команда startproject создает необходимую структуру папок для приложения fbs PyQt5.Это включает в себя src / build , который содержит настройки сборки для вашего пакета, main / icons, , который содержит значки приложений, и src / python для источника.

трепать
 .
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── иконки
        │ ├── Icon.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.PNG
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        └── питон
            └── main.py

  

Ваше простое приложение PyQt5 сгенерировано в src / main / python / main.py и представляет собой полный рабочий пример, который вы можете использовать для создания собственного кода.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext
из PyQt5.QtWidgets импортировать QMainWindow

import sys

класс AppContext (ApplicationContext): # 1. Подкласс ApplicationContext
    def run (self): # 2. Реализуйте run ()
        окно = QMainWindow ()
        version = self.build_settings ['версия']
        window.setWindowTitle ("HelloWorld v" + версия)
        window.resize (250, 150)
        window.show ()
        вернуть себя.app.exec_ () # 3. Завершите run () этой строкой

если __name__ == '__main__':
    appctxt = AppContext () # 4. Создайте экземпляр подкласса
    exit_code = appctxt.run () # 5. Вызов run ()
    sys.exit (код_выхода)
  

Если вы создавали приложения PyQt5, прежде чем вы заметите, что создание приложения с использованием fbs вводит новую концепцию — ApplicationContext .

Контекст приложения

При создании приложений PyQt5 обычно используется ряд компонентов или ресурсов, которые используются во всем приложении.Они обычно хранятся в QMainWindow или как глобальные переменные, которые могут стать немного беспорядочными по мере роста вашего приложения. ApplicationContext обеспечивает центральное место для инициализации и хранения этих компонентов, а также обеспечивает доступ к некоторым основным функциям fbs .

Объект ApplicationContext также создает и содержит ссылку на глобальный объект QApplication — доступный в ApplicationContext.app .Каждое приложение Qt должно иметь одно (и только одно) QApplication для хранения цикла событий и основных настроек. Без fbs вы обычно определяете это в основе вашего скрипта и вызываете .exec () , чтобы запустить цикл обработки событий.

Без fbs это выглядело бы примерно так —

питон
  если __name__ == '__main__':
    app = QApplication ()
    w = MyCustomWindow ()
    app.exec_ ()
  

Эквивалент с fbs будет —

питон
  если __name__ == '__main__':
    ctx = ApplicationContext ()
    w = MyCustomWindow ()
    ctx.app.exec_ ()
  

Если вы хотите создать свою собственную инициализацию `QApplication`, вы можете перезаписать свойство` .app` в своем подклассе `ApplicationContext`, используя` cached_property` (см. Ниже).

Этот базовый пример очевиден для подражания. Однако, как только вы начнете добавлять пользовательские стили и переводы в свое приложение, инициализация может немного увеличиться. Чтобы все было хорошо структурировано, fbs рекомендует создать метод .run в вашем ApplicationContext .

Этот метод должен обрабатывать настройку вашего приложения, такую ​​как создание и отображение окна, наконец, запуск цикла обработки событий на объекте .app . Этот последний шаг выполняется путем вызова self.app.exec_ () в конце метода.

питон
  класс AppContext (ApplicationContext):
    def run (self):
        ...
        вернуть self.app.exec_ ()
  

По мере усложнения инициализации вы можете для ясности разбить подразделы на отдельные методы, например —

питон
  класс AppContext (ApplicationContext):
    def run (self):
        себя.setup_fonts ()
        self.setup_styles ()
        self.setup_translations ()
        вернуть self.app.exec_ ()

    def setup_fonts (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_styles (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_translations (самостоятельно):
        # ...сделай что-нибудь ...

  

При выполнении будет вызван метод `.run ()` и запустится цикл обработки событий. Выполнение продолжается в этом цикле событий до тех пор, пока приложение не будет завершено, после чего ваш метод `.run ()` вернется (с соответствующим кодом выхода).

Создание реального приложения

Простое приложение не так много, поэтому ниже мы рассмотрим нечто более полное — приложение Moonsweeper из моих 15-минутных приложений. Обновленный исходный код доступен для загрузки ниже.

Источник Moonsweeper (fbs) PyQt5

Источник Лунного Сапера (fbs) PySide2

Здесь описаны только изменения, необходимые для преобразования Moonsweeper в fbs . Если вы хотите увидеть, как работает сам Moonsweeper, см. Оригинальную статью о приложении.Пользовательские значки приложений были созданы с использованием иконок Freepik.

Проект имеет ту же базовую структуру, что и приложение-заглушка, которое мы создали выше.

питон
 .
├── README.md
├── requirements.txt
├── screenshot-minesweeper1.jpg
├── screenshot-minesweeper2.jpg
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── Installer.nsi
        ├── иконки
        │ ├── Значок.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.png
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        ├── питон
        │ ├── __init__.py
        │ └── main.ру
        └── ресурсы
            ├── база
            │ └── изображения
            │ ├── bomb.png
            │ ├── bug.png
            │ ├── clock-select.png
            │ ├── cross.png
            │ ├── flag.png
            │ ├── plus.png
            │ ├── rocket.png
            │ ├── смайлик-lol.png
            │ └── смайлик.png
            └── mac
                └── Содержание
                    └── Info.plist
  

Файл src / build / settings / base.json хранит основные сведения о приложении, включая точку входа для запуска приложения с запуском fbs или после его упаковки.

json
  {
    "app_name": "Лунный Сапер",
    "author": "Мартин Фицпатрик",
    "main_module": "src / main / python / main.py",
    "версия": "0.0.0"
}
  

Точка входа сценария находится в основе src / main / python / main.py . Это создает объект AppContext и вызывает .run () для запуска приложения.

питон
  если __name__ == '__main__':
    appctxt = AppContext ()
    exit_code = appctxt.run ()
    sys.exit (код_выхода)
  

Контекст приложения определяет метод .run () для обработки инициализации. В данном случае это состоит из создания и отображения главного окна, а затем запуска цикла обработки событий.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext, \
    cached_property


класс AppContext (ApplicationContext):
    def run (self):
        себя.main_window.show ()
        вернуть self.app.exec_ ()

    @cached_property
    def main_window (сам):
        return MainWindow (self) # Передать контекст окну.

    # ... отрезать ...
  

Декоратор

cached_property

Метод .run () обращается к self.main_window . Вы заметите, что этот метод заключен в декоратор fbs @cached_property . Этот декоратор превращает метод в свойство (как декоратор Python @property ) и кэширует возвращаемое значение.

При первом обращении к свойству выполняется метод и кэшируется возвращаемое значение. При последующих вызовах кэшированное значение возвращается напрямую, ничего не выполняя. Это также имеет побочный эффект — откладывание создания этих объектов до тех пор, пока они не понадобятся.

Вы можете использовать @cached_property для определения каждого компонента приложения (окна, панели инструментов, соединения с базой данных или других ресурсов). Однако у вас нет и для использования @cached_property — в качестве альтернативы вы можете объявить все свойства в своем ApplicationContext.__init__ , как показано ниже.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext

класс AppContext (ApplicationContext):

    def __init __ (self, * args, ** kwargs):
        super (AppContext, self) .__ init __ (* args, ** kwargs)

        self.window = Окно ()

    def run (self):
        self.window.show ()
        вернуть self.app.exec_ ()

  

Доступ к ресурсам с помощью

.get_resource

Приложениям обычно требуются дополнительные файлы данных помимо исходного кода — например, значки файлов, изображения, стили (Qt’s .qss файлов) или документации. Вы также можете связать библиотеки или двоичные файлы для конкретной платформы. Для упрощения этого fbs определяет структуру папок и метод доступа, которые без проблем работают как в разрабатываемых, так и в распределенных версиях.

Папка верхнего уровня resources / должна содержать папку base плюс любую комбинацию других папок, показанных ниже. Папка base содержит файлы, общие для всех платформ, в то время как папки для конкретных платформ могут использоваться для любых файлов, специфичных для данной ОС.

трепать
  base / # для файлов, необходимых для всех ОС
windows / # для файлов, требуемых только в Windows
mac / # "" "" "Mac
linux / # "" "" "Linux
arch / # "" "" "Arch Linux
fedora / # "" "" "Debian Linux
ubuntu / # "" "" "Ubuntu Linux
  

Размещение файлов в нужном месте для загрузки из распределенного приложения на всех платформах обычно является одним из самых сложных моментов при распространении приложений PyQt.Очень удобно, что fbs сделает это за вас.

Для упрощения загрузки ресурсов из папки resources / в ваши приложения fbs предоставляет метод ApplicationContext.get_resource () . Этот метод принимает имя файла, который можно найти где-нибудь в папке resources / , и возвращает абсолютный путь к этому файлу. Вы можете использовать этот возвращенный абсолютный путь, чтобы открыть файл как обычно.

питон
  из fbs_runtime.application_context.PyQt5 импорт ApplicationContext, cached_property


класс AppContext (ApplicationContext):

    # ... отрезать ...

    @cached_property
    def img_bomb (сам):
        вернуть QImage (self.get_resource ('images / bug.png'))

    @cached_property
    def img_flag (сам):
        вернуть QImage (self.get_resource ('images / flag.png'))

    @cached_property
    def img_start (сам):
        вернуть QImage (self.get_resource ('images / rocket.png'))

    @cached_property
    def img_clock (сам):
        вернуть QImage (self.get_resource ('images / clock-select.png'))

    @cached_property
    def status_icons (сам):
        возвращение {
            STATUS_READY: QIcon (self.get_resource ("images / plus.png")),
            STATUS_PLAYING: QIcon (self.get_resource ("images / smiley.png")),
            STATUS_FAILED: QIcon (self.get_resource ("images / cross.png")),
            STATUS_SUCCESS: QIcon (self.get_resource ("images / smiley-lol.png"))
        }

    # ... отрезать ...
  

В нашем приложении Moonsweeper выше у нас есть файл изображения бомбы , доступный по адресу src / main / resources / base / images / bug.jpg . Вызывая ctx.get_resource ('images / bug.png') , мы получаем абсолютный путь к этому файлу изображения в файловой системе, что позволяет нам открыть файл в нашем приложении.

Если файл не существует, вместо него будет вызвана `FileNotFoundError`.

Удобство этого метода заключается в том, что он прозрачно обрабатывает папки платформы в src / main / resources , давая приоритет файлам, зависящим от ОС. Например, если тот же файл также присутствует в src / main / resources / mac / images / bug.jpg , и мы назвали ctx.get_resource ('images / bug.jpg') и получили версию файла для Mac.

Дополнительно get_resource работает как при запуске из исходного кода, так и при запуске замороженной или установленной версии вашего приложения. Если ваши ресурсы / загружаются правильно локально, вы можете быть уверены, что они будут правильно загружаться в ваших распределенных приложениях.

Использование

ApplicationContext из приложения

Как показано выше, наш объект ApplicationContext имеет кэшированные свойства для загрузки и возврата ресурсов.Чтобы позволить нам получить к ним доступ из нашего QMainWindow , мы можем передать контекст и сохранить ссылку на него в нашем окне __init__ .

питон
  класс MainWindow (QMainWindow):
    def __init __ (self, ctx):
        super (MainWindow, self) .__ init __ ()

        self.ctx = ctx # Сохранение ссылки на контекст для ресурсов и т. д.

# ... отрезать ...
  

Теперь, когда у нас есть доступ к контексту через self.ctx , мы можем использовать его в любом месте, где мы хотим ссылаться на эти внешние ресурсы.

питон
  l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_bomb))
        l.setAlignment (Qt.AlignRight | Qt.AlignVCenter)
        hb.addWidget (l)

# ... отрезать ...

        l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_clock))
        l.setAlignment (Qt.AlignLeft | Qt.AlignVCenter)
        hb.addWidget (l)

  

При первом доступе к self.ctx.img_bomb файл будет загружен, QImage будет создан и возвращен.При последующих вызовах мы будем получать изображение из кеша.

питон
  def init_map (самостоятельно):
        # Добавить позиции на карту
        для x в диапазоне (0, self.b_size):
            для y в диапазоне (0, self.b_size):
                w = Pos (x, y, self.ctx.img_flag, self.ctx.img_start, self.ctx.img_bomb)
                self.grid.addWidget (ш, у, х)
                # Подключить сигнал для обработки расширения.
                w.clicked.connect (self.trigger_start)
                w.expandable.connect (сам.expand_reveal)
                w.ohno.connect (self.game_over)

# ... отрезать ...

        self.button.setIcon (self.ctx.status_icons [STATUS_PLAYING])

# ... отрезать ...

    def update_status (сам, статус):
        self.status = статус
        self.button.setIcon (self.ctx.status_icons [self.status])

  

Это все изменения, необходимые для того, чтобы приложение Moonsweeper могло быть упаковано с fbs . Если вы откроете исходную папку, вы сможете запустить ее, как раньше.

Если это сработает, вы готовы перейти к замораживанию и встраиванию установщика.

Зависание приложения

Зависание — это процесс превращения приложения Python в автономный исполняемый файл, который может работать на компьютере другого пользователя. Используйте следующую команду, чтобы превратить исходный код приложения в автономный исполняемый файл:

Результирующий исполняемый файл зависит от платформы, на которой вы заморозили — исполняемый файл будет работать только в той ОС, на которой вы его создали (например.г. исполняемый файл, созданный в Windows, будет работать на другом компьютере с Windows, но не на Mac).

  • Windows создаст исполняемый файл .exe в папке target /
  • MacOS X создаст пакет приложений .app в target / .app
  • Linux создаст исполняемый файл в папке target /

В Windows вам может потребоваться установить Windows 10 SDK, хотя fbs предложит вам, если это так.

Электронная книга (PDF, ePub) и полный исходный код

Для поддержки разработчиков в [[countryRegion]] я даю [[localizedDiscount [couponCode]]]% скидка на все книги и курсы.

[[activeDiscount.description]] Я даю [[activeDiscount.discount]]% скидка на все книги и курсы.

Создание установщика

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

.

Вы должны заморозить ваше приложение сначала затем создать установщик.

Установщик Windows

Установщик Windows позволяет пользователям выбирать каталог для установки исполняемого файла и добавляет ваше приложение в меню «Пуск» пользователя. Приложение также добавляется к установленным программам, что позволяет пользователям удалять его.

Перед созданием установщиков в Windows вам необходимо установить NSIS и убедиться, что его установочный каталог находится в вашем PATH .Затем вы можете создать установщик, используя —

Установщик Windows будет создан по адресу target / Setup.exe .

Установщик Windows для Moonsweeper

Программа установки Windows NSIS для Moonsweeper

Программа установки для Mac

Нет дополнительных шагов для создания установщика MacOS. Просто запустите команду fbs

На Mac эта команда сгенерирует образ диска с адресом target / .dmg . Этот образ диска будет содержать комплект приложений и ярлык для папки «Приложения».Когда ваши пользователи открывают его, они могут перетащить приложение в папку «Приложения», чтобы установить его.

Загрузите комплект Moonsweeper .dmg здесь

Программа установки MacOS для Moonsweeper

Образ диска Mac для Moonsweeper

Установщик Linux

Для сборки установщиков в Linux вам необходимо установить инструмент Ruby Effing package management! — используйте руководство по установке, чтобы настроить его. После этого вы можете использовать стандартную команду для создания файла пакета Linux.

Полученный пакет будет создан в папке target / . В зависимости от вашей платформы файл пакета будет называться .deb , .pkg.tar.xz или .rpm . Ваши пользователи могут установить этот файл с помощью своего диспетчера пакетов.

Установщик Ubuntu для Moonsweeper

Упаковка приложений PyQt5 с помощью fbs — Распространение кроссплатформенных приложений с графическим интерфейсом пользователя с помощью системы сборки fman

fbs — это кроссплатформенная система упаковки PyQt5, которая поддерживает создание настольных приложений для Windows, Mac и Linux (Ubuntu, Fedora и Arch).Построенный на основе PyInstaller , он скрывает некоторые неровности и определяет стандартную структуру проекта, которая позволяет полностью автоматизировать процесс сборки. Включенный API ресурсов особенно полезен, упрощая работу с внешними файлами данных, изображениями или сторонними библиотеками — распространенной проблемой при объединении приложений.

Это руководство проведет вас через шаги создания приложений PyQt5 с использованием fbs с нуля и для преобразования существующих проектов в систему.Если ваше приложение ориентировано на несколько платформ, на него определенно стоит обратить внимание.

Если вы нетерпеливы, вы можете скачать установщики Moonsweeper непосредственно для Windows, MacOS или Linux (Ubuntu).

fbs под лицензией GPL. Это означает, что вы можете использовать систему fbs бесплатно в пакетах, распространяемых с GPL. Для коммерческих (или других не-GPL) пакетов вы должны купить коммерческую лицензию. Актуальную информацию см. На странице лицензирования fbs.

fbs построен на основе PyInstaller. Вы также можете использовать PyInstaller непосредственно для упаковки приложений, см. Нашу упаковку приложений PyQt5 и PySide2 для Windows с помощью учебника PyInstaller.

Требования для установки

fbs работает из коробки как с PyQt PyQt5 , так и с Qt для Python PySide2 . Единственное другое требование — это PyInstaller , который сам обрабатывает упаковку. Вы можете установить их в виртуальной среде (или в виртуальной среде ваших приложений), чтобы поддерживать чистоту вашей среды.

fbs поддерживает только Python версий 3.5 и 3.6

трепать
  python3 -m venv fbsenv
  

После создания активируйте виртуальную среду, запустив ее из командной строки —

трепать
  # В Mac / Linux:
источник fbsenv / bin / активировать

# В Windows:
вызовите fbsenv \ scripts \ activate.bat
  

Наконец, установите необходимые библиотеки. Для PyQt5 вы должны использовать —

питон
  pip3 установить fbs PyQt5 PyInstaller == 3.4
  

Или для Qt для Python (PySide2) —

питон
  pip3 установить fbs PySide2 PyInstaller == 3.4
  

fbs устанавливает инструмент командной строки fbs на ваш путь, который обеспечивает доступ ко всем командам управления fbs . Чтобы увидеть полный список доступных команд, запустите fbs .

трепать
  martin @ Martins-Laptop testapp $ fbs
использование: fbs [-h]
           {startproject, run, freeze, installer, sign_installer, repo,
           загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
           ...

fbs

позиционные аргументы:
  {startproject, run, freeze, installer, sign_installer, repo,
  загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
    startproject Запустить новый проект в текущем каталоге
    запустить Запустите приложение из источника
    freeze Скомпилируйте свой код в автономный исполняемый файл
    установщик Создайте установщик для вашего приложения
    sign_installer Подписать установщик, чтобы операционная система пользователя доверяла ему
    репо Создавать файлы для автоматических обновлений
    загрузить Загрузите установщик и репозиторий в fbs.ш
    выпустить версию Bump и запустить очистить, заморозить, ..., загрузить
    test Выполнять автоматизированные тесты
    clean Удалить предыдущие выходы сборки
    buildvm Создайте виртуальную машину Linux. Например: buildvm ubuntu
    runvm Запустите виртуальную машину Linux. Например: runvm ubuntu
    gengpgkey Сгенерировать ключ GPG для подписи кода Linux
    зарегистрироваться Создайте учетную запись для загрузки файлов
    войти Сохраните данные своей учетной записи в secret.json
    init_licensing Генерация открытых / закрытых ключей для лицензирования

необязательные аргументы:
  -h, --help показать это справочное сообщение и выйти
  

Теперь вы готовы начать упаковывать приложения с fbs .

Запуск приложения

Если вы запускаете приложение PyQt5 с нуля, вы можете использовать команду управления fbs startproject для создания полной, работающей и упаковываемой заглушки приложения в текущей папке. Это дает вам возможность тестировать (и продолжать тестирование) пакетируемость вашего приложения по мере его разработки, а не оставлять это до конца.

Команда предложит вам ответить на несколько вопросов, позволяя указать детали вашего приложения.Эти значения будут записаны в исходный код и конфигурацию вашего приложения. Простое приложение будет создано в папке src / в текущем каталоге.

трепать
  martin @ Martins-Laptop ~ $ fbs startproject
Название приложения [MyApp]: HelloWorld
Автор [Мартин]: Мартин Фицпатрик
Идентификатор пакета Mac (например, com.martin.helloworld, необязательно):
  

Если у вас уже есть собственное работающее приложение PyQt5, вам необходимо: а) использовать созданное приложение в качестве ориентира для преобразования вашего в ту же структуру, или б) создать новое приложение с помощью startproject и перенести код.

Запуск вашего нового проекта

Вы можете запустить это новое приложение с помощью следующей команды fbs в той же папке, из которой вы запустили startproject .

Если все работает, это должно показать вам небольшое пустое окошко с заголовком вашего приложения — интересно, а?

Приложение Hello World в Windows

Приложение Hello World на Mac

Приложение Hello World в Linux

Структура приложения

Команда startproject создает необходимую структуру папок для приложения fbs PyQt5.Это включает в себя src / build , который содержит настройки сборки для вашего пакета, main / icons, , который содержит значки приложений, и src / python для источника.

трепать
 .
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── иконки
        │ ├── Icon.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.PNG
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        └── питон
            └── main.py

  

Ваше простое приложение PyQt5 сгенерировано в src / main / python / main.py и представляет собой полный рабочий пример, который вы можете использовать для создания собственного кода.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext
из PyQt5.QtWidgets импортировать QMainWindow

import sys

класс AppContext (ApplicationContext): # 1. Подкласс ApplicationContext
    def run (self): # 2. Реализуйте run ()
        окно = QMainWindow ()
        version = self.build_settings ['версия']
        window.setWindowTitle ("HelloWorld v" + версия)
        window.resize (250, 150)
        window.show ()
        вернуть себя.app.exec_ () # 3. Завершите run () этой строкой

если __name__ == '__main__':
    appctxt = AppContext () # 4. Создайте экземпляр подкласса
    exit_code = appctxt.run () # 5. Вызов run ()
    sys.exit (код_выхода)
  

Если вы создавали приложения PyQt5, прежде чем вы заметите, что создание приложения с использованием fbs вводит новую концепцию — ApplicationContext .

Контекст приложения

При создании приложений PyQt5 обычно используется ряд компонентов или ресурсов, которые используются во всем приложении.Они обычно хранятся в QMainWindow или как глобальные переменные, которые могут стать немного беспорядочными по мере роста вашего приложения. ApplicationContext обеспечивает центральное место для инициализации и хранения этих компонентов, а также обеспечивает доступ к некоторым основным функциям fbs .

Объект ApplicationContext также создает и содержит ссылку на глобальный объект QApplication — доступный в ApplicationContext.app .Каждое приложение Qt должно иметь одно (и только одно) QApplication для хранения цикла событий и основных настроек. Без fbs вы обычно определяете это в основе вашего скрипта и вызываете .exec () , чтобы запустить цикл обработки событий.

Без fbs это выглядело бы примерно так —

питон
  если __name__ == '__main__':
    app = QApplication ()
    w = MyCustomWindow ()
    app.exec_ ()
  

Эквивалент с fbs будет —

питон
  если __name__ == '__main__':
    ctx = ApplicationContext ()
    w = MyCustomWindow ()
    ctx.app.exec_ ()
  

Если вы хотите создать свою собственную инициализацию `QApplication`, вы можете перезаписать свойство` .app` в своем подклассе `ApplicationContext`, используя` cached_property` (см. Ниже).

Этот базовый пример очевиден для подражания. Однако, как только вы начнете добавлять пользовательские стили и переводы в свое приложение, инициализация может немного увеличиться. Чтобы все было хорошо структурировано, fbs рекомендует создать метод .run в вашем ApplicationContext .

Этот метод должен обрабатывать настройку вашего приложения, такую ​​как создание и отображение окна, наконец, запуск цикла обработки событий на объекте .app . Этот последний шаг выполняется путем вызова self.app.exec_ () в конце метода.

питон
  класс AppContext (ApplicationContext):
    def run (self):
        ...
        вернуть self.app.exec_ ()
  

По мере усложнения инициализации вы можете для ясности разбить подразделы на отдельные методы, например —

питон
  класс AppContext (ApplicationContext):
    def run (self):
        себя.setup_fonts ()
        self.setup_styles ()
        self.setup_translations ()
        вернуть self.app.exec_ ()

    def setup_fonts (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_styles (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_translations (самостоятельно):
        # ...сделай что-нибудь ...

  

При выполнении будет вызван метод `.run ()` и запустится цикл обработки событий. Выполнение продолжается в этом цикле событий до тех пор, пока приложение не будет завершено, после чего ваш метод `.run ()` вернется (с соответствующим кодом выхода).

Создание реального приложения

Простое приложение не так много, поэтому ниже мы рассмотрим нечто более полное — приложение Moonsweeper из моих 15-минутных приложений. Обновленный исходный код доступен для загрузки ниже.

Источник Moonsweeper (fbs) PyQt5

Источник Лунного Сапера (fbs) PySide2

Здесь описаны только изменения, необходимые для преобразования Moonsweeper в fbs . Если вы хотите увидеть, как работает сам Moonsweeper, см. Оригинальную статью о приложении.Пользовательские значки приложений были созданы с использованием иконок Freepik.

Проект имеет ту же базовую структуру, что и приложение-заглушка, которое мы создали выше.

питон
 .
├── README.md
├── requirements.txt
├── screenshot-minesweeper1.jpg
├── screenshot-minesweeper2.jpg
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── Installer.nsi
        ├── иконки
        │ ├── Значок.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.png
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        ├── питон
        │ ├── __init__.py
        │ └── main.ру
        └── ресурсы
            ├── база
            │ └── изображения
            │ ├── bomb.png
            │ ├── bug.png
            │ ├── clock-select.png
            │ ├── cross.png
            │ ├── flag.png
            │ ├── plus.png
            │ ├── rocket.png
            │ ├── смайлик-lol.png
            │ └── смайлик.png
            └── mac
                └── Содержание
                    └── Info.plist
  

Файл src / build / settings / base.json хранит основные сведения о приложении, включая точку входа для запуска приложения с запуском fbs или после его упаковки.

json
  {
    "app_name": "Лунный Сапер",
    "author": "Мартин Фицпатрик",
    "main_module": "src / main / python / main.py",
    "версия": "0.0.0"
}
  

Точка входа сценария находится в основе src / main / python / main.py . Это создает объект AppContext и вызывает .run () для запуска приложения.

питон
  если __name__ == '__main__':
    appctxt = AppContext ()
    exit_code = appctxt.run ()
    sys.exit (код_выхода)
  

Контекст приложения определяет метод .run () для обработки инициализации. В данном случае это состоит из создания и отображения главного окна, а затем запуска цикла обработки событий.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext, \
    cached_property


класс AppContext (ApplicationContext):
    def run (self):
        себя.main_window.show ()
        вернуть self.app.exec_ ()

    @cached_property
    def main_window (сам):
        return MainWindow (self) # Передать контекст окну.

    # ... отрезать ...
  

Декоратор

cached_property

Метод .run () обращается к self.main_window . Вы заметите, что этот метод заключен в декоратор fbs @cached_property . Этот декоратор превращает метод в свойство (как декоратор Python @property ) и кэширует возвращаемое значение.

При первом обращении к свойству выполняется метод и кэшируется возвращаемое значение. При последующих вызовах кэшированное значение возвращается напрямую, ничего не выполняя. Это также имеет побочный эффект — откладывание создания этих объектов до тех пор, пока они не понадобятся.

Вы можете использовать @cached_property для определения каждого компонента приложения (окна, панели инструментов, соединения с базой данных или других ресурсов). Однако у вас нет и для использования @cached_property — в качестве альтернативы вы можете объявить все свойства в своем ApplicationContext.__init__ , как показано ниже.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext

класс AppContext (ApplicationContext):

    def __init __ (self, * args, ** kwargs):
        super (AppContext, self) .__ init __ (* args, ** kwargs)

        self.window = Окно ()

    def run (self):
        self.window.show ()
        вернуть self.app.exec_ ()

  

Доступ к ресурсам с помощью

.get_resource

Приложениям обычно требуются дополнительные файлы данных помимо исходного кода — например, значки файлов, изображения, стили (Qt’s .qss файлов) или документации. Вы также можете связать библиотеки или двоичные файлы для конкретной платформы. Для упрощения этого fbs определяет структуру папок и метод доступа, которые без проблем работают как в разрабатываемых, так и в распределенных версиях.

Папка верхнего уровня resources / должна содержать папку base плюс любую комбинацию других папок, показанных ниже. Папка base содержит файлы, общие для всех платформ, в то время как папки для конкретных платформ могут использоваться для любых файлов, специфичных для данной ОС.

трепать
  base / # для файлов, необходимых для всех ОС
windows / # для файлов, требуемых только в Windows
mac / # "" "" "Mac
linux / # "" "" "Linux
arch / # "" "" "Arch Linux
fedora / # "" "" "Debian Linux
ubuntu / # "" "" "Ubuntu Linux
  

Размещение файлов в нужном месте для загрузки из распределенного приложения на всех платформах обычно является одним из самых сложных моментов при распространении приложений PyQt.Очень удобно, что fbs сделает это за вас.

Для упрощения загрузки ресурсов из папки resources / в ваши приложения fbs предоставляет метод ApplicationContext.get_resource () . Этот метод принимает имя файла, который можно найти где-нибудь в папке resources / , и возвращает абсолютный путь к этому файлу. Вы можете использовать этот возвращенный абсолютный путь, чтобы открыть файл как обычно.

питон
  из fbs_runtime.application_context.PyQt5 импорт ApplicationContext, cached_property


класс AppContext (ApplicationContext):

    # ... отрезать ...

    @cached_property
    def img_bomb (сам):
        вернуть QImage (self.get_resource ('images / bug.png'))

    @cached_property
    def img_flag (сам):
        вернуть QImage (self.get_resource ('images / flag.png'))

    @cached_property
    def img_start (сам):
        вернуть QImage (self.get_resource ('images / rocket.png'))

    @cached_property
    def img_clock (сам):
        вернуть QImage (self.get_resource ('images / clock-select.png'))

    @cached_property
    def status_icons (сам):
        возвращение {
            STATUS_READY: QIcon (self.get_resource ("images / plus.png")),
            STATUS_PLAYING: QIcon (self.get_resource ("images / smiley.png")),
            STATUS_FAILED: QIcon (self.get_resource ("images / cross.png")),
            STATUS_SUCCESS: QIcon (self.get_resource ("images / smiley-lol.png"))
        }

    # ... отрезать ...
  

В нашем приложении Moonsweeper выше у нас есть файл изображения бомбы , доступный по адресу src / main / resources / base / images / bug.jpg . Вызывая ctx.get_resource ('images / bug.png') , мы получаем абсолютный путь к этому файлу изображения в файловой системе, что позволяет нам открыть файл в нашем приложении.

Если файл не существует, вместо него будет вызвана `FileNotFoundError`.

Удобство этого метода заключается в том, что он прозрачно обрабатывает папки платформы в src / main / resources , давая приоритет файлам, зависящим от ОС. Например, если тот же файл также присутствует в src / main / resources / mac / images / bug.jpg , и мы назвали ctx.get_resource ('images / bug.jpg') и получили версию файла для Mac.

Дополнительно get_resource работает как при запуске из исходного кода, так и при запуске замороженной или установленной версии вашего приложения. Если ваши ресурсы / загружаются правильно локально, вы можете быть уверены, что они будут правильно загружаться в ваших распределенных приложениях.

Использование

ApplicationContext из приложения

Как показано выше, наш объект ApplicationContext имеет кэшированные свойства для загрузки и возврата ресурсов.Чтобы позволить нам получить к ним доступ из нашего QMainWindow , мы можем передать контекст и сохранить ссылку на него в нашем окне __init__ .

питон
  класс MainWindow (QMainWindow):
    def __init __ (self, ctx):
        super (MainWindow, self) .__ init __ ()

        self.ctx = ctx # Сохранение ссылки на контекст для ресурсов и т. д.

# ... отрезать ...
  

Теперь, когда у нас есть доступ к контексту через self.ctx , мы можем использовать его в любом месте, где мы хотим ссылаться на эти внешние ресурсы.

питон
  l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_bomb))
        l.setAlignment (Qt.AlignRight | Qt.AlignVCenter)
        hb.addWidget (l)

# ... отрезать ...

        l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_clock))
        l.setAlignment (Qt.AlignLeft | Qt.AlignVCenter)
        hb.addWidget (l)

  

При первом доступе к self.ctx.img_bomb файл будет загружен, QImage будет создан и возвращен.При последующих вызовах мы будем получать изображение из кеша.

питон
  def init_map (самостоятельно):
        # Добавить позиции на карту
        для x в диапазоне (0, self.b_size):
            для y в диапазоне (0, self.b_size):
                w = Pos (x, y, self.ctx.img_flag, self.ctx.img_start, self.ctx.img_bomb)
                self.grid.addWidget (ш, у, х)
                # Подключить сигнал для обработки расширения.
                w.clicked.connect (self.trigger_start)
                w.expandable.connect (сам.expand_reveal)
                w.ohno.connect (self.game_over)

# ... отрезать ...

        self.button.setIcon (self.ctx.status_icons [STATUS_PLAYING])

# ... отрезать ...

    def update_status (сам, статус):
        self.status = статус
        self.button.setIcon (self.ctx.status_icons [self.status])

  

Это все изменения, необходимые для того, чтобы приложение Moonsweeper могло быть упаковано с fbs . Если вы откроете исходную папку, вы сможете запустить ее, как раньше.

Если это сработает, вы готовы перейти к замораживанию и встраиванию установщика.

Зависание приложения

Зависание — это процесс превращения приложения Python в автономный исполняемый файл, который может работать на компьютере другого пользователя. Используйте следующую команду, чтобы превратить исходный код приложения в автономный исполняемый файл:

Результирующий исполняемый файл зависит от платформы, на которой вы заморозили — исполняемый файл будет работать только в той ОС, на которой вы его создали (например.г. исполняемый файл, созданный в Windows, будет работать на другом компьютере с Windows, но не на Mac).

  • Windows создаст исполняемый файл .exe в папке target /
  • MacOS X создаст пакет приложений .app в target / .app
  • Linux создаст исполняемый файл в папке target /

В Windows вам может потребоваться установить Windows 10 SDK, хотя fbs предложит вам, если это так.

Электронная книга (PDF, ePub) и полный исходный код

Для поддержки разработчиков в [[countryRegion]] я даю [[localizedDiscount [couponCode]]]% скидка на все книги и курсы.

[[activeDiscount.description]] Я даю [[activeDiscount.discount]]% скидка на все книги и курсы.

Создание установщика

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

.

Вы должны заморозить ваше приложение сначала затем создать установщик.

Установщик Windows

Установщик Windows позволяет пользователям выбирать каталог для установки исполняемого файла и добавляет ваше приложение в меню «Пуск» пользователя. Приложение также добавляется к установленным программам, что позволяет пользователям удалять его.

Перед созданием установщиков в Windows вам необходимо установить NSIS и убедиться, что его установочный каталог находится в вашем PATH .Затем вы можете создать установщик, используя —

Установщик Windows будет создан по адресу target / Setup.exe .

Установщик Windows для Moonsweeper

Программа установки Windows NSIS для Moonsweeper

Программа установки для Mac

Нет дополнительных шагов для создания установщика MacOS. Просто запустите команду fbs

На Mac эта команда сгенерирует образ диска с адресом target / .dmg . Этот образ диска будет содержать комплект приложений и ярлык для папки «Приложения».Когда ваши пользователи открывают его, они могут перетащить приложение в папку «Приложения», чтобы установить его.

Загрузите комплект Moonsweeper .dmg здесь

Программа установки MacOS для Moonsweeper

Образ диска Mac для Moonsweeper

Установщик Linux

Для сборки установщиков в Linux вам необходимо установить инструмент Ruby Effing package management! — используйте руководство по установке, чтобы настроить его. После этого вы можете использовать стандартную команду для создания файла пакета Linux.

Полученный пакет будет создан в папке target / . В зависимости от вашей платформы файл пакета будет называться .deb , .pkg.tar.xz или .rpm . Ваши пользователи могут установить этот файл с помощью своего диспетчера пакетов.

Установщик Ubuntu для Moonsweeper

Упаковка приложений PyQt5 с помощью fbs — Распространение кроссплатформенных приложений с графическим интерфейсом пользователя с помощью системы сборки fman

fbs — это кроссплатформенная система упаковки PyQt5, которая поддерживает создание настольных приложений для Windows, Mac и Linux (Ubuntu, Fedora и Arch).Построенный на основе PyInstaller , он скрывает некоторые неровности и определяет стандартную структуру проекта, которая позволяет полностью автоматизировать процесс сборки. Включенный API ресурсов особенно полезен, упрощая работу с внешними файлами данных, изображениями или сторонними библиотеками — распространенной проблемой при объединении приложений.

Это руководство проведет вас через шаги создания приложений PyQt5 с использованием fbs с нуля и для преобразования существующих проектов в систему.Если ваше приложение ориентировано на несколько платформ, на него определенно стоит обратить внимание.

Если вы нетерпеливы, вы можете скачать установщики Moonsweeper непосредственно для Windows, MacOS или Linux (Ubuntu).

fbs под лицензией GPL. Это означает, что вы можете использовать систему fbs бесплатно в пакетах, распространяемых с GPL. Для коммерческих (или других не-GPL) пакетов вы должны купить коммерческую лицензию. Актуальную информацию см. На странице лицензирования fbs.

fbs построен на основе PyInstaller. Вы также можете использовать PyInstaller непосредственно для упаковки приложений, см. Нашу упаковку приложений PyQt5 и PySide2 для Windows с помощью учебника PyInstaller.

Требования для установки

fbs работает из коробки как с PyQt PyQt5 , так и с Qt для Python PySide2 . Единственное другое требование — это PyInstaller , который сам обрабатывает упаковку. Вы можете установить их в виртуальной среде (или в виртуальной среде ваших приложений), чтобы поддерживать чистоту вашей среды.

fbs поддерживает только Python версий 3.5 и 3.6

трепать
  python3 -m venv fbsenv
  

После создания активируйте виртуальную среду, запустив ее из командной строки —

трепать
  # В Mac / Linux:
источник fbsenv / bin / активировать

# В Windows:
вызовите fbsenv \ scripts \ activate.bat
  

Наконец, установите необходимые библиотеки. Для PyQt5 вы должны использовать —

питон
  pip3 установить fbs PyQt5 PyInstaller == 3.4
  

Или для Qt для Python (PySide2) —

питон
  pip3 установить fbs PySide2 PyInstaller == 3.4
  

fbs устанавливает инструмент командной строки fbs на ваш путь, который обеспечивает доступ ко всем командам управления fbs . Чтобы увидеть полный список доступных команд, запустите fbs .

трепать
  martin @ Martins-Laptop testapp $ fbs
использование: fbs [-h]
           {startproject, run, freeze, installer, sign_installer, repo,
           загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
           ...

fbs

позиционные аргументы:
  {startproject, run, freeze, installer, sign_installer, repo,
  загрузка, выпуск, проверка, очистка, buildvm, runvm, gengpgkey, регистрация, вход, init_licensing}
    startproject Запустить новый проект в текущем каталоге
    запустить Запустите приложение из источника
    freeze Скомпилируйте свой код в автономный исполняемый файл
    установщик Создайте установщик для вашего приложения
    sign_installer Подписать установщик, чтобы операционная система пользователя доверяла ему
    репо Создавать файлы для автоматических обновлений
    загрузить Загрузите установщик и репозиторий в fbs.ш
    выпустить версию Bump и запустить очистить, заморозить, ..., загрузить
    test Выполнять автоматизированные тесты
    clean Удалить предыдущие выходы сборки
    buildvm Создайте виртуальную машину Linux. Например: buildvm ubuntu
    runvm Запустите виртуальную машину Linux. Например: runvm ubuntu
    gengpgkey Сгенерировать ключ GPG для подписи кода Linux
    зарегистрироваться Создайте учетную запись для загрузки файлов
    войти Сохраните данные своей учетной записи в secret.json
    init_licensing Генерация открытых / закрытых ключей для лицензирования

необязательные аргументы:
  -h, --help показать это справочное сообщение и выйти
  

Теперь вы готовы начать упаковывать приложения с fbs .

Запуск приложения

Если вы запускаете приложение PyQt5 с нуля, вы можете использовать команду управления fbs startproject для создания полной, работающей и упаковываемой заглушки приложения в текущей папке. Это дает вам возможность тестировать (и продолжать тестирование) пакетируемость вашего приложения по мере его разработки, а не оставлять это до конца.

Команда предложит вам ответить на несколько вопросов, позволяя указать детали вашего приложения.Эти значения будут записаны в исходный код и конфигурацию вашего приложения. Простое приложение будет создано в папке src / в текущем каталоге.

трепать
  martin @ Martins-Laptop ~ $ fbs startproject
Название приложения [MyApp]: HelloWorld
Автор [Мартин]: Мартин Фицпатрик
Идентификатор пакета Mac (например, com.martin.helloworld, необязательно):
  

Если у вас уже есть собственное работающее приложение PyQt5, вам необходимо: а) использовать созданное приложение в качестве ориентира для преобразования вашего в ту же структуру, или б) создать новое приложение с помощью startproject и перенести код.

Запуск вашего нового проекта

Вы можете запустить это новое приложение с помощью следующей команды fbs в той же папке, из которой вы запустили startproject .

Если все работает, это должно показать вам небольшое пустое окошко с заголовком вашего приложения — интересно, а?

Приложение Hello World в Windows

Приложение Hello World на Mac

Приложение Hello World в Linux

Структура приложения

Команда startproject создает необходимую структуру папок для приложения fbs PyQt5.Это включает в себя src / build , который содержит настройки сборки для вашего пакета, main / icons, , который содержит значки приложений, и src / python для источника.

трепать
 .
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── иконки
        │ ├── Icon.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.PNG
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        └── питон
            └── main.py

  

Ваше простое приложение PyQt5 сгенерировано в src / main / python / main.py и представляет собой полный рабочий пример, который вы можете использовать для создания собственного кода.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext
из PyQt5.QtWidgets импортировать QMainWindow

import sys

класс AppContext (ApplicationContext): # 1. Подкласс ApplicationContext
    def run (self): # 2. Реализуйте run ()
        окно = QMainWindow ()
        version = self.build_settings ['версия']
        window.setWindowTitle ("HelloWorld v" + версия)
        window.resize (250, 150)
        window.show ()
        вернуть себя.app.exec_ () # 3. Завершите run () этой строкой

если __name__ == '__main__':
    appctxt = AppContext () # 4. Создайте экземпляр подкласса
    exit_code = appctxt.run () # 5. Вызов run ()
    sys.exit (код_выхода)
  

Если вы создавали приложения PyQt5, прежде чем вы заметите, что создание приложения с использованием fbs вводит новую концепцию — ApplicationContext .

Контекст приложения

При создании приложений PyQt5 обычно используется ряд компонентов или ресурсов, которые используются во всем приложении.Они обычно хранятся в QMainWindow или как глобальные переменные, которые могут стать немного беспорядочными по мере роста вашего приложения. ApplicationContext обеспечивает центральное место для инициализации и хранения этих компонентов, а также обеспечивает доступ к некоторым основным функциям fbs .

Объект ApplicationContext также создает и содержит ссылку на глобальный объект QApplication — доступный в ApplicationContext.app .Каждое приложение Qt должно иметь одно (и только одно) QApplication для хранения цикла событий и основных настроек. Без fbs вы обычно определяете это в основе вашего скрипта и вызываете .exec () , чтобы запустить цикл обработки событий.

Без fbs это выглядело бы примерно так —

питон
  если __name__ == '__main__':
    app = QApplication ()
    w = MyCustomWindow ()
    app.exec_ ()
  

Эквивалент с fbs будет —

питон
  если __name__ == '__main__':
    ctx = ApplicationContext ()
    w = MyCustomWindow ()
    ctx.app.exec_ ()
  

Если вы хотите создать свою собственную инициализацию `QApplication`, вы можете перезаписать свойство` .app` в своем подклассе `ApplicationContext`, используя` cached_property` (см. Ниже).

Этот базовый пример очевиден для подражания. Однако, как только вы начнете добавлять пользовательские стили и переводы в свое приложение, инициализация может немного увеличиться. Чтобы все было хорошо структурировано, fbs рекомендует создать метод .run в вашем ApplicationContext .

Этот метод должен обрабатывать настройку вашего приложения, такую ​​как создание и отображение окна, наконец, запуск цикла обработки событий на объекте .app . Этот последний шаг выполняется путем вызова self.app.exec_ () в конце метода.

питон
  класс AppContext (ApplicationContext):
    def run (self):
        ...
        вернуть self.app.exec_ ()
  

По мере усложнения инициализации вы можете для ясности разбить подразделы на отдельные методы, например —

питон
  класс AppContext (ApplicationContext):
    def run (self):
        себя.setup_fonts ()
        self.setup_styles ()
        self.setup_translations ()
        вернуть self.app.exec_ ()

    def setup_fonts (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_styles (самостоятельно):
        # ...сделай что-нибудь ...

    def setup_translations (самостоятельно):
        # ...сделай что-нибудь ...

  

При выполнении будет вызван метод `.run ()` и запустится цикл обработки событий. Выполнение продолжается в этом цикле событий до тех пор, пока приложение не будет завершено, после чего ваш метод `.run ()` вернется (с соответствующим кодом выхода).

Создание реального приложения

Простое приложение не так много, поэтому ниже мы рассмотрим нечто более полное — приложение Moonsweeper из моих 15-минутных приложений. Обновленный исходный код доступен для загрузки ниже.

Источник Moonsweeper (fbs) PyQt5

Источник Лунного Сапера (fbs) PySide2

Здесь описаны только изменения, необходимые для преобразования Moonsweeper в fbs . Если вы хотите увидеть, как работает сам Moonsweeper, см. Оригинальную статью о приложении.Пользовательские значки приложений были созданы с использованием иконок Freepik.

Проект имеет ту же базовую структуру, что и приложение-заглушка, которое мы создали выше.

питон
 .
├── README.md
├── requirements.txt
├── screenshot-minesweeper1.jpg
├── screenshot-minesweeper2.jpg
└── src
    ├── строить
    │ └── настройки
    │ ├── base.json
    │ ├── linux.json
    │ └── mac.json
    └── главная
        ├── Installer.nsi
        ├── иконки
        │ ├── Значок.ico
        │ ├── README.md
        │ ├── база
        │ │ ├── 16.png
        │ │ ├── 24.png
        │ │ ├── 32.png
        │ │ ├── 48.png
        │ │ └── 64.png
        │ ├── linux
        │ │ ├── 1024.png
        │ │ ├── 128.png
        │ │ ├── 256.png
        │ │ └── 512.png
        │ └── mac
        │ ├── 1024.png
        │ ├── 128.png
        │ ├── 256.png
        │ └── 512.png
        ├── питон
        │ ├── __init__.py
        │ └── main.ру
        └── ресурсы
            ├── база
            │ └── изображения
            │ ├── bomb.png
            │ ├── bug.png
            │ ├── clock-select.png
            │ ├── cross.png
            │ ├── flag.png
            │ ├── plus.png
            │ ├── rocket.png
            │ ├── смайлик-lol.png
            │ └── смайлик.png
            └── mac
                └── Содержание
                    └── Info.plist
  

Файл src / build / settings / base.json хранит основные сведения о приложении, включая точку входа для запуска приложения с запуском fbs или после его упаковки.

json
  {
    "app_name": "Лунный Сапер",
    "author": "Мартин Фицпатрик",
    "main_module": "src / main / python / main.py",
    "версия": "0.0.0"
}
  

Точка входа сценария находится в основе src / main / python / main.py . Это создает объект AppContext и вызывает .run () для запуска приложения.

питон
  если __name__ == '__main__':
    appctxt = AppContext ()
    exit_code = appctxt.run ()
    sys.exit (код_выхода)
  

Контекст приложения определяет метод .run () для обработки инициализации. В данном случае это состоит из создания и отображения главного окна, а затем запуска цикла обработки событий.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext, \
    cached_property


класс AppContext (ApplicationContext):
    def run (self):
        себя.main_window.show ()
        вернуть self.app.exec_ ()

    @cached_property
    def main_window (сам):
        return MainWindow (self) # Передать контекст окну.

    # ... отрезать ...
  

Декоратор

cached_property

Метод .run () обращается к self.main_window . Вы заметите, что этот метод заключен в декоратор fbs @cached_property . Этот декоратор превращает метод в свойство (как декоратор Python @property ) и кэширует возвращаемое значение.

При первом обращении к свойству выполняется метод и кэшируется возвращаемое значение. При последующих вызовах кэшированное значение возвращается напрямую, ничего не выполняя. Это также имеет побочный эффект — откладывание создания этих объектов до тех пор, пока они не понадобятся.

Вы можете использовать @cached_property для определения каждого компонента приложения (окна, панели инструментов, соединения с базой данных или других ресурсов). Однако у вас нет и для использования @cached_property — в качестве альтернативы вы можете объявить все свойства в своем ApplicationContext.__init__ , как показано ниже.

питон
  из fbs_runtime.application_context.PyQt5 импортировать ApplicationContext

класс AppContext (ApplicationContext):

    def __init __ (self, * args, ** kwargs):
        super (AppContext, self) .__ init __ (* args, ** kwargs)

        self.window = Окно ()

    def run (self):
        self.window.show ()
        вернуть self.app.exec_ ()

  

Доступ к ресурсам с помощью

.get_resource

Приложениям обычно требуются дополнительные файлы данных помимо исходного кода — например, значки файлов, изображения, стили (Qt’s .qss файлов) или документации. Вы также можете связать библиотеки или двоичные файлы для конкретной платформы. Для упрощения этого fbs определяет структуру папок и метод доступа, которые без проблем работают как в разрабатываемых, так и в распределенных версиях.

Папка верхнего уровня resources / должна содержать папку base плюс любую комбинацию других папок, показанных ниже. Папка base содержит файлы, общие для всех платформ, в то время как папки для конкретных платформ могут использоваться для любых файлов, специфичных для данной ОС.

трепать
  base / # для файлов, необходимых для всех ОС
windows / # для файлов, требуемых только в Windows
mac / # "" "" "Mac
linux / # "" "" "Linux
arch / # "" "" "Arch Linux
fedora / # "" "" "Debian Linux
ubuntu / # "" "" "Ubuntu Linux
  

Размещение файлов в нужном месте для загрузки из распределенного приложения на всех платформах обычно является одним из самых сложных моментов при распространении приложений PyQt.Очень удобно, что fbs сделает это за вас.

Для упрощения загрузки ресурсов из папки resources / в ваши приложения fbs предоставляет метод ApplicationContext.get_resource () . Этот метод принимает имя файла, который можно найти где-нибудь в папке resources / , и возвращает абсолютный путь к этому файлу. Вы можете использовать этот возвращенный абсолютный путь, чтобы открыть файл как обычно.

питон
  из fbs_runtime.application_context.PyQt5 импорт ApplicationContext, cached_property


класс AppContext (ApplicationContext):

    # ... отрезать ...

    @cached_property
    def img_bomb (сам):
        вернуть QImage (self.get_resource ('images / bug.png'))

    @cached_property
    def img_flag (сам):
        вернуть QImage (self.get_resource ('images / flag.png'))

    @cached_property
    def img_start (сам):
        вернуть QImage (self.get_resource ('images / rocket.png'))

    @cached_property
    def img_clock (сам):
        вернуть QImage (self.get_resource ('images / clock-select.png'))

    @cached_property
    def status_icons (сам):
        возвращение {
            STATUS_READY: QIcon (self.get_resource ("images / plus.png")),
            STATUS_PLAYING: QIcon (self.get_resource ("images / smiley.png")),
            STATUS_FAILED: QIcon (self.get_resource ("images / cross.png")),
            STATUS_SUCCESS: QIcon (self.get_resource ("images / smiley-lol.png"))
        }

    # ... отрезать ...
  

В нашем приложении Moonsweeper выше у нас есть файл изображения бомбы , доступный по адресу src / main / resources / base / images / bug.jpg . Вызывая ctx.get_resource ('images / bug.png') , мы получаем абсолютный путь к этому файлу изображения в файловой системе, что позволяет нам открыть файл в нашем приложении.

Если файл не существует, вместо него будет вызвана `FileNotFoundError`.

Удобство этого метода заключается в том, что он прозрачно обрабатывает папки платформы в src / main / resources , давая приоритет файлам, зависящим от ОС. Например, если тот же файл также присутствует в src / main / resources / mac / images / bug.jpg , и мы назвали ctx.get_resource ('images / bug.jpg') и получили версию файла для Mac.

Дополнительно get_resource работает как при запуске из исходного кода, так и при запуске замороженной или установленной версии вашего приложения. Если ваши ресурсы / загружаются правильно локально, вы можете быть уверены, что они будут правильно загружаться в ваших распределенных приложениях.

Использование

ApplicationContext из приложения

Как показано выше, наш объект ApplicationContext имеет кэшированные свойства для загрузки и возврата ресурсов.Чтобы позволить нам получить к ним доступ из нашего QMainWindow , мы можем передать контекст и сохранить ссылку на него в нашем окне __init__ .

питон
  класс MainWindow (QMainWindow):
    def __init __ (self, ctx):
        super (MainWindow, self) .__ init __ ()

        self.ctx = ctx # Сохранение ссылки на контекст для ресурсов и т. д.

# ... отрезать ...
  

Теперь, когда у нас есть доступ к контексту через self.ctx , мы можем использовать его в любом месте, где мы хотим ссылаться на эти внешние ресурсы.

питон
  l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_bomb))
        l.setAlignment (Qt.AlignRight | Qt.AlignVCenter)
        hb.addWidget (l)

# ... отрезать ...

        l = QLabel ()
        l.setPixmap (QPixmap.fromImage (self.ctx.img_clock))
        l.setAlignment (Qt.AlignLeft | Qt.AlignVCenter)
        hb.addWidget (l)

  

При первом доступе к self.ctx.img_bomb файл будет загружен, QImage будет создан и возвращен.При последующих вызовах мы будем получать изображение из кеша.

питон
  def init_map (самостоятельно):
        # Добавить позиции на карту
        для x в диапазоне (0, self.b_size):
            для y в диапазоне (0, self.b_size):
                w = Pos (x, y, self.ctx.img_flag, self.ctx.img_start, self.ctx.img_bomb)
                self.grid.addWidget (ш, у, х)
                # Подключить сигнал для обработки расширения.
                w.clicked.connect (self.trigger_start)
                w.expandable.connect (сам.expand_reveal)
                w.ohno.connect (self.game_over)

# ... отрезать ...

        self.button.setIcon (self.ctx.status_icons [STATUS_PLAYING])

# ... отрезать ...

    def update_status (сам, статус):
        self.status = статус
        self.button.setIcon (self.ctx.status_icons [self.status])

  

Это все изменения, необходимые для того, чтобы приложение Moonsweeper могло быть упаковано с fbs . Если вы откроете исходную папку, вы сможете запустить ее, как раньше.

Если это сработает, вы готовы перейти к замораживанию и встраиванию установщика.

Зависание приложения

Зависание — это процесс превращения приложения Python в автономный исполняемый файл, который может работать на компьютере другого пользователя. Используйте следующую команду, чтобы превратить исходный код приложения в автономный исполняемый файл:

Результирующий исполняемый файл зависит от платформы, на которой вы заморозили — исполняемый файл будет работать только в той ОС, на которой вы его создали (например.г. исполняемый файл, созданный в Windows, будет работать на другом компьютере с Windows, но не на Mac).

  • Windows создаст исполняемый файл .exe в папке target /
  • MacOS X создаст пакет приложений .app в target / .app
  • Linux создаст исполняемый файл в папке target /

В Windows вам может потребоваться установить Windows 10 SDK, хотя fbs предложит вам, если это так.

Электронная книга (PDF, ePub) и полный исходный код

Для поддержки разработчиков в [[countryRegion]] я даю [[localizedDiscount [couponCode]]]% скидка на все книги и курсы.

[[activeDiscount.description]] Я даю [[activeDiscount.discount]]% скидка на все книги и курсы.

Создание установщика

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

.

Вы должны заморозить ваше приложение сначала затем создать установщик.

Установщик Windows

Установщик Windows позволяет пользователям выбирать каталог для установки исполняемого файла и добавляет ваше приложение в меню «Пуск» пользователя. Приложение также добавляется к установленным программам, что позволяет пользователям удалять его.

Перед созданием установщиков в Windows вам необходимо установить NSIS и убедиться, что его установочный каталог находится в вашем PATH .Затем вы можете создать установщик, используя —

Установщик Windows будет создан по адресу target / Setup.exe .

Установщик Windows для Moonsweeper

Программа установки Windows NSIS для Moonsweeper

Программа установки для Mac

Нет дополнительных шагов для создания установщика MacOS. Просто запустите команду fbs

На Mac эта команда сгенерирует образ диска с адресом target / .dmg . Этот образ диска будет содержать комплект приложений и ярлык для папки «Приложения».Когда ваши пользователи открывают его, они могут перетащить приложение в папку «Приложения», чтобы установить его.

Загрузите комплект Moonsweeper .dmg здесь

Программа установки MacOS для Moonsweeper

Образ диска Mac для Moonsweeper

Установщик Linux

Для сборки установщиков в Linux вам необходимо установить инструмент Ruby Effing package management! — используйте руководство по установке, чтобы настроить его.