Renpy Linux – Remplacer la fenêtre de sélection de dossier Tkinter par une fenêtre Qt5

Contexte

Par défaut sous Linux, Renpy requière Tkinter (tk pour python) afin d’ouvrir une fenêtre permettant la sélection du dossier contenant les projets.

Fenêtre originale

Je trouve personnellement que la fenêtre de base ne continents pas toute les fonctions dont j’ai besoin. J’ai donc modifié le code de Renpy afin d’ouvrir une fenêtre de sélection de fichier avec la bibliothèque Qt (PyQt) à la place.

Fenêtre Qt

Modification

Il suffit d’avoir la bibliothèque PyQt5 d’installé sur votre machine. Dans mon cas, utilisant une imprimante Hp avec l’utilitaire HpLib, PyQt5 est déja installé.

Le fichier à modifier s’appelle tkaskdir.py. Dans les sources de RenPy, il est localisé dans: launcher/game/

Voici le contenu du fichier non modifié:

#!/usr/bin/env python2

# This is used on Linux and Mac to prompt the user for the projects
# directory.

import sys

# Python3 and Python2-style imports.
try:
    from tkinter import Tk
    from tkinter.filedialog import askdirectory
except ImportError:
    from Tkinter import Tk
    from tkFileDialog import askdirectory

# Binary mode stdout for python23.
try:
    sys.stdout = sys.stdout.buffer
except:
    pass

# Create the TK canvas.

if __name__ == "__main__":
    root = Tk()
    root.withdraw()

    result = askdirectory(initialdir=sys.argv[1], parent=root, title="Select Ren'Py Projects Directory")

    if result == ():
        result = ""

    sys.stdout.write(result.encode("utf8"))

Et voici le code du fichier modifié:

#!/usr/bin/env python2

# This is used on Linux and Mac to prompt the user for the projects
# directory.

import sys

QtGui = None
try: from PyQt5.QtWidgets import QApplication, QFileDialog
except: pass

# Python3 and Python2-style imports.
try:
    from tkinter import Tk
    from tkinter.filedialog import askdirectory
except ImportError:
    from Tkinter import Tk
    from tkFileDialog import askdirectory

# Binary mode stdout for python23.
try:
    sys.stdout = sys.stdout.buffer
except:
    pass

if __name__ == "__main__":

    if QApplication and QFileDialog:
        # Create QtApplication and Qt directory window
        app = QApplication(sys.argv)
        result = QFileDialog().getExistingDirectory(directory=sys.argv[1], caption="Select Ren'Py Projects Directory")
        if not result:
            result = ""
        
        app.quit()

    else:
        # Create the TK canvas.
        root = Tk()
        root.withdraw()

        result = askdirectory(initialdir=sys.argv[1], parent=root, title="Select Ren'Py Projects Directory")

        if result == ():
            result = ""

    sys.stdout.write(result.encode("utf8"))

PKGBUILD pour Archlinux / Manjaro

Si vous êtes sous Archlinux ou Manjaro, je suis parti du PKGBUILD officiel: https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/renpy

Voici le PKGBUILD modifié

# $Id: PKGBUILD 371260 2018-08-13 09:13:06Z alucryd $
# Maintainer: Maxime Gauduin <alucryd@archlinux.org>
# Contributor: Cravix <dr.neemous@gmail.com>
# Contributor: AlexanderR <rvacheva@nxt.ru>
# Contributor: zhn <zhangn1985@gmail.com>

pkgbase=renpy
pkgname=(
  renpy
  renpy-demos
)
pkgver=7.3.5
pkgrel=1
pkgdesc="The Ren'Py Visual Novel Engine"
arch=(x86_64)
url=https://www.renpy.org
license=(MIT)
depends=(
  ffmpeg
  glew
  python2-pygame-sdl2
)
makedepends=(cython2)
optdepends=('atom: Default editor')
source=(
  https://www.renpy.org/dl/${pkgver}/renpy-${pkgver}-source.tar.bz2
  renpy
  renpy.desktop
  renpy.png
  renpy-system-fribidi.patch

  tkaskdir.py # Add Qt file chooser
)
sha256sums=('84d7f46b54b9204bf472cd533201380ff2c8669b7967b2c98c4bafbd1c2bd9aa'
            'e10630ec0b5d0e479f20b15a4f5ceec8e6992dd8cbc7d3cd5c487da380858a28'
            'fccde3461617a098a78d938d9db782d403eda410a84ab52825a597498ab95834'
            '611edc07a40ccb8e04e8858847fc1d2a066d29c2ed54e5b357880a0605818dc5'
            'c82d57331b8146ac3f76579f95e7cdca559f84919f96b35e9b19c25a5e2128b5'

            'd6511ac6e9446f7db19153285a02b06b83dd89315421dbbe7bf4747c577cc718') # Add Qt file chooser

prepare() {
  cd renpy-${pkgver}-source

  sed 's/python/python2/' -i atom/Atom.edit.py launcher/game/tkaskdir.py

  patch -Np1 -i ../renpy-system-fribidi.patch
  cp "../tkaskdir.py" "launcher/game/tkaskdir.py" # Add Qt file chooser
}

build() {
  cd renpy-${pkgver}-source

  export RENPY_CYTHON=cython2

  python2 module/setup.py build
}

package_renpy() {
  optdepends=(
    'renpy-demos: Tutorial and The Question demos'
    'tk: Set projects directory'
  )

  cd renpy-${pkgver}-source

  python2 module/setup.py install --root="${pkgdir}" --prefix=/usr --optimize=1 --skip-build

  install -dm 755 "${pkgdir}"/usr/share/{renpy,doc}

  cp -dr --no-preserve=ownership atom doc gui launcher renpy renpy.py "${pkgdir}"/usr/share/renpy/
  ln -s /usr/share/renpy/doc "${pkgdir}"/usr/share/doc/renpy

  install -Dm 755 ../renpy -t "${pkgdir}"/usr/bin/
  install -Dm 644 ../renpy.desktop -t "${pkgdir}"/usr/share/applications/
  install -Dm 644 ../renpy.png -t "${pkgdir}"/usr/share/pixmaps/

  install -Dm 644 LICENSE.txt -t "${pkgdir}"/usr/share/licenses/renpy/
}

package_renpy-demos() {
  depends=(renpy)

  cd renpy-${pkgver}-source

  install -dm 755 "${pkgdir}"/usr/share/renpy

  cp -dr --no-preserve=ownership the_question tutorial "${pkgdir}"/usr/share/renpy/

  install -dm 755 "${pkgdir}"/usr/share/licenses
  ln -s renpy "${pkgdir}"/usr/share/licenses/renpy-demos
}

# vim: ts=2 sw=2 et:

Laisser un commentaire