[PyKDE] Re: kdepyuic from PyKDE-3.3.2

Hans-Peter Jansen hpj at urpla.net
Sat Apr 19 20:53:01 BST 2003


On Saturday 19 April 2003 18:50, Jim Bublitz wrote:
> On 19-Apr-03 Hans-Peter Jansen wrote:
> > today I started to play with qt designer and kde widgets. During
> > this course, I stumbled across some pretty obvious flaws in
> > kdepyuic (besides being white space damaged). While at it, I've
> > applied a KDatePicker ctor mangling in order to satisfy KDE's
> > needs.
> >
> > Attached:
> > kdepyuic.diff
> > kdepyuic-ws.diff (same with my prefered white spacing)
> > kdeform1.ui{.h} (which I played with)
> >
> > Let me know, what do you think about it
>
> kdepyuic was kind of a hack in the first place, and fell into the
> "works for me but not for anyone else" category, so I pulled it
> from PyKDE-3.5. This has always been kind of an afterthought in
> PyKDE and deserves some more focused attention.
>
> However if this works, I'll consider putting it back in. Long term
> I'd like a better solution, and anyone interested is welcome to
> provide it if I don't get to it first.

Well, I cannot imagine, how kdepyuic from 3.3.2 worked out of the
box. Looking into the package revealed two versions (kdepyuic{.py}),
from which the damaged one got installed here and where I based my 
work on :(. Sorry for not looking deeper before.

Comparing them showed some print statements were added, which I 
added now, too. Here is the corrected full version.

Please check it, and add again to the distribution again.

While experimenting with KHSSelector, I got stuck, because I have
no idea on how to extract the color with the given coordinates.

Somebody with an idea out there? (kdeform2.ui*)

> Jim

Pete
-------------- next part --------------
#!/usr/bin/env python

#Terms and Conditions

#Copyright (c) 2002 Jim Bublitz (jbublitz at nwinternet.com)

#Permission is hereby granted, free of charge, to any person obtaining a copy of
#this software and associated documentation files (the "Software"), to deal in
#the Software without restriction, including without limitation the rights to
#use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
#of the Software, and to permit persons to whom the Software is furnished to do
#so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all
#copies or substantial portions of the Software.

#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
#COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
#IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
#CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#Except as contained in this notice, the names of the copyright holders shall not
#be used in advertising or otherwise to promote the sale, use or other dealings
#in this Software without prior written authorization from the copyright holders.

# 2003/04/19: some minor bits from Hans-Peter Jansen, <hpj at urpla.net>

import sys, getopt, os, os.path, string

#---------- globals ----------

FALSE      = 0
TRUE       = not FALSE
addApp     = TRUE
addImport  = TRUE
pyuicPath  = "pyuic"
filename   = ""


# --------- support functions ----------

def getOptions ():
    global filename

    opterr = 0
    shortOptions = "aip:"
    longOptions  = "noapp noimport pyuic="

    try:
        optlist, args = getopt.getopt (sys.argv [1:], shortOptions, longOptions)
    except getopt.GetoptError:
        opterr  = 1
        optlist = []
        args    = []

    if opterr or (len (args) != 1):
        print """\nUsage:

  kdepyuic [options] filename.ui

  Options:
    -a, --noapp Don't add KApplication code
    -i, --noimport  Don't add kdecore, kdeui import statements
    -p, --pyuic Path to pyuic program
  """
        return FALSE

    filename = args[0]
    return checkOptions (optlist)

def checkOptions (optlist):
    global addApp, addImport, pyuicPath

    for pair in optlist:
        if (pair [0] == '--noapp') or (pair [0] == '-a'):
            addApp = FALSE

        elif (pair [0] == '--noimport') or (pair [0] == '-i'):
            addImport = FALSE

        elif (pair [0] == '--pyuic') or (pair [0] == '-p'):
            pyuicPath = pair [1]



# --------- operations ----------

def addimport (n):
    if addApp:
        n.write ('from kdecore import KCmdLineArgs, KApplication\n')
    n.write ('from kdeui import *\n\n')


def addapp (indent, n):
    n.write (indent + 'appname     = ""\n')
    n.write (indent + 'description = ""\n')
    n.write (indent + 'version     = ""\n')
    n.write ('\n')
    n.write (indent + 'KCmdLineArgs.init (sys.argv, appname, description, version)\n')
    n.write (indent + 'a = KApplication ()\n\n')

def doPyuic ():

    fn = os.path.splitext (os.path.basename(filename)) [0] + '.py'

    if addApp:
        opts = ' -x -o '
    else:
        opts = ' -o '

    if os.system (pyuicPath + opts + fn + ' ' + filename) != 0:
        print pyuicPath + opts + fn + ' ' + filename + " failed"
        sys.exit (-1)

    if addApp or addImport:
        m = open (fn, 'r')
        n = open (fn + '.tmp', 'w')

        buff = m.readlines ()

        for line in buff:
            if addImport and (string.strip (line) == 'from qt import *'):
                n.write (line)
                addimport (n)
            elif addApp and (string.strip (line) == 'a = QApplication(sys.argv)'):
                indent = 0
                while line [indent] in string.whitespace:
                    indent = indent + 1
                addapp (line[:indent], n)
            elif string.find(line, " = KDatePicker(") != -1:
                o = string.find(line, ",")
                n.write (line[:o] + ",QDate.currentDate()" + line[o:])
            else:
                n.write (line)

        m.close ()
        n.close ()

        os.unlink (fn)
        os.rename (fn + '.tmp', fn)

    print fn + ' written'


# --------- main ----------

getOptions ()
doPyuic ()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kdeform2.ui
Type: application/x-designer
Size: 7620 bytes
Desc: not available
Url : http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20030419/ecc44f24/kdeform2.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kdeform2.ui.h
Type: text/x-chdr
Size: 638 bytes
Desc: not available
Url : http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20030419/ecc44f24/kdeform2.ui.bin


More information about the PyQt mailing list