Python Qt widgets for CG-Wire using
`gazu
<https://github.com/cgwire/gazu>`__.
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
The Widgets initialize in such a way you can easily embed them for your needs.
The examples assume a running Qt application instance exists.
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)
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()
It's easy and quick to embed the available Persons into your own list view.
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:
This will show all CG-Wire projects as thumbnails.
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()
Show a Welcome popup to the user with his or her thumbnail.
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()