Skip to main content

Python Qt widgets for CG-Wire using gazu

Project description

Python Qt widgets for CG-Wire using `gazu <https://github.com/cgwire/gazu>`__.

Dependencies

This requires Gazu and Qt.py.

What is Qtazu?

Qtazu implements Qt widgets to connect and work with a CG-Wire instance through an interface running in Python.

  • Reusable components to develop your own interfaces to interact with CG-Wire.

  • Embeddable in DCCs supporting Python and Qt

  • Or use them in your own standalone Python application, like a studio pipeline.

  • Agnostic widgets so you can easily instantiate them as you need

  • Support PyQt5, PySide2, PyQt4 and PySide through `Qt.py <https://github.com/mottosso/Qt.py>`__

WIP: This is a WIP repository

Examples

The Widgets initialize in such a way you can easily embed them for your needs.

The examples assume a running Qt application instance exists.

Logging in

qtazu\_login

qtazu_login

from qtazu.widgets.login import Login

widget = Login()
widget.show()

If you want to set your CG-Wire instance URL so the User doesn’t have to you can set it through environment variable: CGWIRE_HOST

from qtazu.widgets.login import Login
import os

os.environ["CGWIRE_HOST"] = "https://zou-server-url/api"
widget = Login()
widget.show()

Directly trigger a callback once someone has logged in using Qt signals:

from qtazu.widgets.login import Login

def callback(success):
    print("Did login succeed? Answer: %s" % success)

widget = Login()
widget.logged_in.connect(callback)
widget.show()

You can also automate a login through ``gazu` <https://github.com/cgwire/gazu#quickstart>`__ and qtazu will use it.

Or if you have logged in through another Python process you can pass on the tokens:

import os
import json

# Store CGWIRE_TOKENS for application (simplified for example)
os.environ["CGWIRE_TOKENS"] = json.dumps(gazu.client.tokens)
os.environ["CGWIRE_HOST"] = host


# In application "log-in" using the tokens
host = os.environ["CGWIRE_HOST"]
tokens = json.loads(os.environ["CGWIRE_TOKENS"])
gazu.client.set_host(host)
gazu.client.set_tokens(tokens)

Submitting Comments

You can easily submit comments for a specific Task, this includes drag ‘n’ dropping your own images of videos as attachment or using a Screen Marguee tool to attach a screenshot to your comment.

Make sure you are logged in prior to this.

from qtazu.widgets.comment import CommentWidget

task_id = "xyz" # Make sure to set a valid Task Id
widget = CommentWidget(task_id=task_id)
widget.show()
qtazu\_comment\_screenshot

qtazu_comment_screenshot

Display all Persons with Thumbnails

It’s easy and quick to embed the available Persons into your own list view.

qtazu\_persons\_model

qtazu_persons_model

from qtazu.models.persons import PersonModel
from Qt import QtWidgets, QtCore

model = PersonModel()
view = QtWidgets.QListView()
view.setIconSize(QtCore.QSize(30, 30))
view.setStyleSheet("QListView::item { margin: 3px; padding: 3px;}")
view.setModel(model)
view.setMinimumHeight(60)
view.setWindowTitle("CG-Wire Persons")
view.show()

Here’s an example prototype of listing Persons as you tag them:

qtazu\_tag\_prototype\_02

qtazu_tag_prototype_02

Define your own Qt widget that loads Thumbnails in the background

This will show all CG-Wire projects as thumbnails.

qtazu\_projects

qtazu_projects

import gazu
from Qt import QtWidgets
from qtazu.widgets.thumbnail import ThumbnailBase

main = QtWidgets.QWidget()
main.setWindowTitle("CG-Wire Projects")
layout = QtWidgets.QHBoxLayout(main)

for project in gazu.project.all_open_projects():

    thumbnail = ThumbnailBase()
    thumbnail.setFixedWidth(75)
    thumbnail.setFixedHeight(75)
    thumbnail.setToolTip(project["name"])
    project_id = project["id"]
    thumbnail.load("pictures/thumbnails/projects/{0}.png".format(project_id))
    layout.addWidget(thumbnail)

main.show()

Welcome a User with a message

Show a Welcome popup to the user with his or her thumbnail.

qtazu\_welcome\_popup

qtazu_welcome_popup

from Qt import QtWidgets, QtGui, QtCore
from qtazu.widgets.thumbnail import ThumbnailBase
import gazu


class UserPopup(QtWidgets.QWidget):
    """Pop-up showing 'welcome user' and user thumbnail"""
    def __init__(self, parent=None, user=None):
        super(UserPopup, self).__init__(parent=parent)

        layout = QtWidgets.QHBoxLayout(self)

        thumbnail = ThumbnailBase()
        thumbnail.setFixedWidth(75)
        thumbnail.setFixedHeight(75)
        thumbnail.setToolTip(user["first_name"])

        welcome = QtWidgets.QLabel("Welcome!")

        layout.addWidget(thumbnail)
        layout.addWidget(welcome)

        self.thumbnail = thumbnail
        self.welcome = welcome
        self._user = None

        if user:
            self.set_user(user)

    def set_user(self, user):

        self._user = user

        # Load user thumbnail
        self.thumbnail.load("pictures/thumbnails/persons/{0}.png".format(user["id"]))

        # Set welcome message
        self.welcome.setText("Welcome {first_name} {last_name}!".format(
            **user
        ))


# Show pop-up about current user
user = gazu.client.get_current_user()
popup = UserPopup(user=user)
popup.show()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

qtazu-0.1.4-py2.py3-none-any.whl (30.8 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page