[python] PySide for gui

On 29/10/2015 at 00:05, xxxxxxxx wrote:

Hi
I wanna say thanks to maxon, for recent enhancements for python bridge.

Alternative ide for ui - qtdesigner, transferring of data to python by _pyside-uic
_
a few recent tests with pyside 1.2.4 _

in c4d

or kraken by Hybride Technologies for FE

upd.
i remove pic from dead image hoster
_

On 29/10/2015 at 10:30, xxxxxxxx wrote:

What new enhancements?
I've been using PySide ( and also C++ Qt gui code ) in my plugins for this same kind of thing in R13 for a while now.
I'm even launching Qt based dialogs from C4D plugins that can interact with the scene objects.
Of course they can't be docked like a GeDialog.

What new enhancements have they added for Qt since R13?

-ScottA

On 29/10/2015 at 10:49, xxxxxxxx wrote:

Scott, i tried before, got different glitches and crashes - probably i had a few amount  of experience or wrong python/pyside*😉. I'm studying qt/pyside

* - even today, i post issue at kraken's git, about wrong display of node body(rounded rectangle)... resolved by new pyside v.1.2.4... before was same as for houdini or maya - 1.2.2
-----

so even, i create such topic

Of course they can't be docked like a GeDialog.

yes, 🤢
but can be to create more complex qt dialog.

On 29/10/2015 at 11:28, xxxxxxxx wrote:

Scott, have you try to build widgets, for windows os? Example(macos or linux) https://github.com/fabric-engine/FabricUI/blob/pablo/PySideBuild.sh

On 29/10/2015 at 11:29, xxxxxxxx wrote:

Ok.
I just wanted to make sure Maxon didn't actually do anything new to make Qt stuff integrate with C4D.
I've asked for this many times over the years. And the replies from the Maxon devs has always been negative about Qt. So it surprised me to see you saying "new stuff" for handling Qt.

I've had to figure out how to integrate Qt with C4D on my own. The same way I had to figure out how to use Win32 code and Win32 dialogs with C4D.
PySide is dead simple to use in C4D due to python itself (nothing Maxon did). Even in R13.
But C++ is a bit harder because you need to create a Custom Build Tool for moc'ing it to generate the signals & slots code in VS.

I had considered doing Qt<-->C4D YouTube tutorials for both PySide & C++.
But since I'm using R13. I have to use VS2010 with it.
And I figured those programs were too outdated to use for tutorials.

-ScottA

On 29/10/2015 at 11:44, xxxxxxxx wrote:

Originally posted by xxxxxxxx

Ok.
I just wanted to make sure Maxon didn't actually do anything new to make Qt stuff integrate with C4D.
I've asked for this many times over the years. And the replies from the Maxon devs has always been negative about Qt. So it surprised me to see you saying "new stuff" for handling Qt.

argh, sorry, that bring false info what maxon done. i only point that moving to vfx platform concept(2015 - http://www.vfxplatform.com ) - change to pyhon 2.7 > make a few pluses for maxon

yes, this also stopped me to learn pyside or pyQT

Originally posted by xxxxxxxx

But C++ is a bit harder because you need to create a Custom Build Tool for moc'ing it to generate the signals & slots code in VS.

oh yes, i made qtport of Fabric Engine(it's canvas is qt app gui) to one cad tool. Sdk of this cad is tiny(early bird), so it was easy

On 29/10/2015 at 11:46, xxxxxxxx wrote:

Originally posted by xxxxxxxx

Scott, have you try to build widgets, for windows os? Example(macos or linux) https://github.com/fabric-engine/FabricUI/blob/pablo/PySideBuild.sh

Yes. Although I just remembered that I used PyQt. Not PySide.
Here's one of the examples I wrote.
This code creates floating windowless Qt widgets that can interact with things in C4D.

#This code creates various gizmos without a visible dialog window (a SplashScreen)  
#Then closes it after 5 seconds  
  
import c4d,sys,time  
from PyQt4 import QtGui, QtCore, uic  
from os import path  
QtCore.QCoreApplication.addLibraryPath(path.join(path.dirname(QtCore.__file__), "plugins"))  
  
def handleButton() :  
  print "Button Clicked"      
    
def handleSlider(value) :      
  for i in xrange(0,101) :  
      if value == i: print i  
        
def handleCHKBOX(state) :        
      if state == QtCore.Qt.Checked: print "on"  
      else: print "off"      
        
  
def main() :  
    
  app = QtGui.QApplication(sys.argv)  
    
  curTime = QtCore.QTime.currentTime()  
  print curTime  
  
  #Creates a gizmo with no dialog and forces it to be the topmost window  
  #Also puts an icon on the button  
  button = QtGui.QPushButton('Test')  
  button.move(700, 400)  #Screen X,Y position  
  icon = QtGui.QIcon("C:/Users/user/Desktop/myimage.jpg")  
  button.setIconSize(QtCore.QSize(64,64))  
  button.setIcon(icon)  
  button.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)  
  button.show()  
  button.clicked.connect(handleButton)  
    
  #Creates a gizmo with no dialog and forces it to be the topmost window  
  labelText = "Hello"      
  myLabel = QtGui.QLabel("<font color=red size=72>" + labelText + "</font>")  
  myLabel.move(700, 350)  #Screen X,Y position  
  myLabel.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)  
  myLabel.show()  
  
  #Creates a label gizmo that is used to display an image  
  image = QtGui.QPixmap( "C:/Users/user/Desktop/myimage.jpg" )  
  myLabel = QtGui.QLabel()  
  myLabel.setPixmap(image)  
  myLabel.move(700, 350)  #Screen X,Y position  
  myLabel.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)      
  myLabel.show()  
  
  #Creates a slider gizmo  
  sld = QtGui.QSlider(QtCore.Qt.Horizontal)  
  sld.setFocusPolicy(QtCore.Qt.NoFocus)  
  sld.setMinimum(0)  
  sld.setMaximum(101)      
  sld.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)  
  sld.setGeometry( 700, 300, 100, 20)   #Screen X,Y position, width&height  
  sld.valueChanged[int].connect(handleSlider)  
  sld.show()  
    
  #Creates a checkbox gizmo  
  cb = QtGui.QCheckBox('My checkbox')  
  cb.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)  
  cb.toggle()  
  cb.stateChanged.connect(handleCHKBOX)  
  cb.setGeometry(700, 250, 85, 15)  #Screen X,Y position, width&height  
  cb.show()  
    
  #Close the gizmos after 5 seconds      
  QtCore.QTimer.singleShot(5000, app.quit)  
  app.exec_()  
    
if __name__=='__main__':  
  main()

To be honest I toyed around for this for like one day. Said to myself...heck this is simple...Made some examples and some notes...And then never used it again.
I don't use Python very much other than for quickly testing things in C4D. And I never install custom python modules like this.
I stay mostly in C++.

-ScottA

On 29/10/2015 at 12:00, xxxxxxxx wrote:

Originally posted by xxxxxxxx

To be honest I toyed around for this for like one day. Said to myself...heck this is simple...Made some examples and some notes...And then never used it again.
I don't use Python very much other than for quickly testing things in C4D. And I never install custom python modules like this.
I stay mostly in C++.

-ScottA

Interesting sample, for example i spent a week or more to understand how assembly their widget python-module-of-fabricui 😠 still no luck - i feel that it not finished. I use "hybrid" - c/c++ extensions and scripting

your example, i moved from such declaration of QtGui.QApplication, make like in maya or hou

import c4d  
import sys  
  
from PySide import QtCore, QtGui, shiboken  
from PySide.QtCore import *  
from PySide.QtGui import *  
  
class Window(QtGui.QMainWindow) :  
  def __init__(self) :  
  super(Window,self).__init__()  
  self.initUI()  
  def initUI(self) :  
  self.setGeometry(200,500,400,400)  
  self.setWindowTitle("Test")  
  
  centralWidget = QtGui.QWidget()  
  self.setCentralWidget(centralWidget)  
    
def main() :  
    
  app = QtGui.QApplication.instance() # checks if QApplication already exists       
  if not app: # create QApplication if it doesnt exist   
        app = QtGui.QApplication([])  
        print "qt app"  
  app.aboutToQuit.connect(app.deleteLater)  
  print "qt app ins"      
  win = Window()  
  win.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)  
  win.setProperty("saveWindowPref", True )  
  if win.isVisible() == False:  
      win.show()  
      app.exec_()  
      while (win.isVisible()) :  
          app.processEvents()  
      if win.isVisible() == False:  
          print "exit"  
          win.close()      
  
if __name__ == "__main__":  
  main()

On 29/10/2015 at 12:07, xxxxxxxx wrote:

I'm sorry that made such topic and content. Maybe python, qt and etc.  will be one of topics at future developer kitchens