Skip to content

Latest commit

 

History

History
207 lines (137 loc) · 5.81 KB

README.md

File metadata and controls

207 lines (137 loc) · 5.81 KB

Qtazu

Python Qt widgets for CG-Wire using 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

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

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 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

Display all Persons with Thumbnails

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

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

Define your own Qt widget that loads Thumbnails in the background

This will show all CG-Wire projects as thumbnails.

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

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()