[PyKDE] KPasswordDialog and KWallet
David Boddie
david at boddie.org.uk
Sat Nov 25 19:12:51 GMT 2006
On Fri, 24 Nov 2006 17:43:38 +0100, Hans van Leeuwen wrote:
>Let me start by saying I just started using PyKDE and it's been a lot of fun.
>I have never used Python, nor done any GUI-progamming until last week, and
>I've already managed to create a few useable programs.
You're a quick learner! It's good to hear that you're enjoying yourself. :-)
>The question I have is regarding KPasswordDialog and KWallet. I'm writing a
>program which asks the user for a password, and passes it on to an external
>application, which returns an error if the password is incorrect.
>
>I would really like to be able to store the password using KWallet, but I
>can't figure out how to do that.
Looking at the API, I can see your problem.
>I use the following function:
>
>def getPass():
> password = QCString();
> prompt = "Enter your password"
> KPasswordDialog.getPassword(password, prompt)
> return password
>
>It asks for the password and returns the entered value, but there is no "Keep
>password" checkbox.
>
>If I use "password = 'foobar'", the checkbox appears, but this is not what I
>want, because I don't know the correct password beforehand.
Yes, I also found I could pass a null QCString and get a checkbox as well,
but that's useless because you then have no way of accessing the string
afterwards. (I believe the implementation modifies the string itself.)
>In the KpasswordDialog API-docs I see an option "enableKeep", but I have no
>idea how to use it.
QDialog-based classes use a convention where a pointer or reference to
a value is passed to some static function in C++ so that the function can
fill it in, and you can then look at the result afterwards. In Python, these
functions typically return a tuple instead, containing a value indicating
success or failure. In this case, you also get the value corresponding to
the "Keep password" checkbox, though you don't seem to be able to specify
that.
Maybe that's a problem with the PyKDE API, but there is a simple
workaround:
1. Create a dialog using one of the standard constructors. The first
one looks OK. Pass True for the enableKeep argument.
2. Set any text using setPrompt().
3. Call the dialog's exec_loop() method, obtaining a value that
indicates whether the user accepted or cancelled the dialog.
4. Call the dialog's password() method to get the password.
It's not quite as straightforward as using the static function, but you
get more control over the process as a result.
Good luck!
David
More information about the PyQt
mailing list