Git Product home page Git Product logo

glader's Introduction

Glader

Generates skeleton code from a glade file. The generated signal handler stubs can then be filled in to provide functionality. Arguments for signal handlers are automatically decided through introspection using Gtk.

I didn't know this before I wrote it, but this does the exact same thing that pyqt4uic and pykde4uic do for Qt designer files. It does a little more actually. It includes a GUI for previewing/editing, and also generates stubs for the signal handlers. It does this by reading the glade file's XML, parsing it, and using introspection to generate the stubs.

The glade file still needs to be present in the finished application directory. It is used with Gtk.Builder.add_from_file() to generate the widgets.

When everything is working as expected, doing glader input.glade output.py will create an executable Gtk application that can be ran and previewed by running ./output.py.

Command Line:

If an input file name (glade), and an output file name (python) are passed to glader, the code will be generated and written to the output file.

You can pass - as the output file name to write to stdout.

Gui Mode:

When glader is ran with no arguments, or just an input file is given, a GUI is loaded. In GUI mode a preview is generated, and can be edited before saving. When an input file is given, or --gui is used, the preview code is automatically generated when the program loads.

The GUI supports Python syntax highlighting using GtkSourceView. The viewer uses GtkSourceView themes, and can be changed using the theme selector. Themes are located in /usr/share/gtksourceview-3.0/styles, and can be downloaded from various places on the internet. The most common is https://wiki.gnome.org/Projects/GtkSourceView/StyleSchemes.

Usage:

Usage:
    glader -h | -v
    glader [FILE] [OUTFILE] [-d] [-g] [-l]

Options:
    FILE           : Glade file to parse.
    OUTFILE        : File name for output.
                     If - is given, output will be printed to stdout.
    -d,--dynamic   : Use dynamic object initialization method.
    -g,--gui       : Force use of a GUI, even when an output file is given.
                     You still have to use the 'Save' button to apply
                     changes.
    -h,--help      : Show this help message.
    -l,--lib       : Generate a usable Gtk.Window class only, not a
                     script.
    -v,--version   : Show version.

Dependencies:

Glader has several GTK-related dependencies. If you are already creating GTK apps then you may have some of these installed already.

Python modules:

Installed with pip.

  • docopt - Handles command-line argument parsing.

System packages:

Installed with your package manager, like apt.

  • gir1.2-gtk-3.0 - Provides helpers and access to GIRepository.
  • libgtksourceview-3.0-dev - Provides the GtkSourceView widget.
  • python3-gi - Provides python bindings for gobject-introspection.

Install:

An installer script is included in the repo. It will attempt to install any missing dependencies. The full installation process is this:

# Clone the repo:
git clone https://github.com/welbornprod/glader.git

# Change to the project directory:
cd glader

# Run the installer (--user is recommended).
./install --user

If there are no errors, then you're good to go. A glader command was just installed.

Compatibility:

Glader is designed for PyGTK3, and Python 3.

It's possible to backport this to older versions, but no work will be done on that unless the need is great. File an issue if that is something you would like to see.

Contributions:

Contributions are welcome. That's what this repo is for. File an issue, or send me a pull request if you would like to see a feature added to Glader.

GUI Preview:

Glader

glader's People

Contributors

cjwelborn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

joelsa

glader's Issues

Stopped development

Hi!
I'm bits57(I'd like to keep myself anonymous, at least for now).
I see you have cut development in 2017, and I'd like to ask you to open it again. I can contribute to this myself, I know how your code works as I've studied glader closely. I use it in my daily development with glade and GNOME Builder, and it has helped me a lot. I have already a list of things to change:

  • Support for other main toplevels(gtkDialog, gtkFontChooserDialog, etc...)
  • Better instructions on how to install gtkSourceView (I never got it to work, and eventually changed it to a gtkTextView from glader.glade, though this might be a problem on either my ubuntu install or in ubuntu itself, so I'm not excpecting this to change much)
  • Compiled versions (.deb, .rpm) in Releases (I can do this)

If you don't want to do this, that's fine too! I can fork this to my github, but it would nice to co-develop this with the original author :).
Also, I'm not using my github every day so if you answer, I might not answer the same day. And since you're in the US, there is several hours between us.

Thank you
bits57

Error parsing glade file

Error parsing glade file!: PiTV/sidebar.glade
'NoneType' object has no attribute 'name'

No usable info was found for this file: PiTV/sidebar.glade

Real installer

The installer should take care of everything. It should install the system and pip dependencies. Publishing a pip package would take care of half of that (use requires=[...]). Publishing a Debian package would probably take care of all of that. It's worth looking into.

The install script that is included only copies the files to a user/system directory. I don't really want it to start handling dependencies when there are already tools for that.

Use `__new__` to generate Gtk classes.

This will turn self.winMain accesses into self, and allow children to be accessed as 'self.childWin' instead of self.childWin.childWin. The builder needs to be involved in __new__, so it may be a little tricky to instantiate the main window in __new__, and then instantiate all children in __init__ (especially with the current code generation, and regular vs. dynamic init).

The idea came from this article.

More information is needed.

RecursionError: maximum recursion depth exceeded

Python 3.8.5 Fedora 32
While running ./install --user:
(couple of times the same:)
__File "./install", line 159, in init
self.parse_commands()
File "./install", line 166, in parse_commands
for i, x in enumerate(self[:]):
File "/usr/lib64/python3.8/collections/init.py", line 1079, in getitem
return self.class(self.data[i])

Solution from https://stackoverflow.com/questions/8177073/python-maximum-recursion-depth-exceeded doesnt seem to work, because fedora says "Memory protection violation".

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.