Editing Customising Qt look and feel and Python in 30 Mins

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
-
This is a simple tutorial to show how to use Python and Qt Designer to create your own look and feel for your applications using custom images, the Qt Resource system and Cascading Style Sheets (CSS).
+
===Introduction===
 +
 
 +
This is a simple tutorial to show how to use Python and Qt-Designer to create your own look and feel for your applications using custom images, the Qt Resource system, and Cascading Style Sheets (CSS).
 +
 
 +
 
We are going to show you how you can create a look similar to the [[http://qt.gitorious.org/qt-labs/mobile-demos Qt Mobile Demos]]
We are going to show you how you can create a look similar to the [[http://qt.gitorious.org/qt-labs/mobile-demos Qt Mobile Demos]]
 +
[[Image:qtmobile-calc.jpg]]
[[Image:qtmobile-calc.jpg]]
 +
But our version will be landscape
But our version will be landscape
Line 9: Line 15:
[[Image:ncalc.jpg]]
[[Image:ncalc.jpg]]
-
Qt has the concept of Qt Resources, images and files that you want to be deployed with your application. It incorporates them into a special binary resource file that the application can refer to at run time, so they wont get lost as part of your application distribution, but can also be changed very easily. These images are referred to in your application using standard CSS syntax which can be edited graphically within Qt Designer.
+
Qt has the concept of Qt Resources, images and files that you want to be deployed with your application. It incorporates them into a special binary resource file that the application can refer to at run time, so they wont get lost as part of your application distribution, but can also be changed very easily. These images are referred to in your application using standard CSS syntax which can be edited graphically within Qt-Designer.
-
==Assumptions==
+
===Assumptions===
-
This tutorial assumes that you have a working [[Category:Python|Python]], PyQt and Qt Designer environment up and working. If you have not then do this first tutorial  
+
This tutorial assumes that you have a working [[Category:Python|Python]],Pyqt and Qt-Designer environment up and working. If you have not then do this first tutorial  
[http://talk.maemo.org/showthread.php?t=43663 Qt Designer/Python for Windows XP in 30 Mins]
[http://talk.maemo.org/showthread.php?t=43663 Qt Designer/Python for Windows XP in 30 Mins]
-
==Setup==
+
 
 +
===Setup===
# Download the mobile tarball demos from [[http://qt.gitorious.org/qt-labs/mobile-demos/trees/master Here]]. Windows users get zipped version [[http://www.megaupload.com/?d=M1G26TC7 here]]
# Download the mobile tarball demos from [[http://qt.gitorious.org/qt-labs/mobile-demos/trees/master Here]]. Windows users get zipped version [[http://www.megaupload.com/?d=M1G26TC7 here]]
Line 27: Line 34:
[[Image:Qt-ResourceManager.png]]
[[Image:Qt-ResourceManager.png]]
 +
Now Create a new resource file called customui.rc, add a blank prefix and then add all the images from our image directory using the add files icon. Save this.
Now Create a new resource file called customui.rc, add a blank prefix and then add all the images from our image directory using the add files icon. Save this.
 +
[[image: Qt-Edit-Resources.png]]
[[image: Qt-Edit-Resources.png]]
Line 36: Line 45:
Thats it our images are now ready to b incorporated into our application.
Thats it our images are now ready to b incorporated into our application.
-
==Create the UI==
+
===Create the UI===
 +
 
Having created an initial main Window Object when we started Qt Designer, we are now going to create some buttons with custom images on a custom background
Having created an initial main Window Object when we started Qt Designer, we are now going to create some buttons with custom images on a custom background
Line 48: Line 58:
[[image:Qt-Designer-Layout.png]]
[[image:Qt-Designer-Layout.png]]
-
Rename each button object to PushButton1, PushButton2, PushButton3, PushButton4. Leave the labels for the moment as in the picture, though later on we will delete them.
 
-
==Add Colours and Images==
+
Rename each button object to PusButton1,PushButton2,PushButton3,PushButton4. Leave the labels for the moment as in the picture, though later on we will delete them.
 +
 
 +
===Add Colours and Images===
We are now ready to add colours and images to our UI using the stylesheet editor.
We are now ready to add colours and images to our UI using the stylesheet editor.
1. On the object inspector right click on our frame2 object and select Change Style sheet.  
1. On the object inspector right click on our frame2 object and select Change Style sheet.  
 +
[[image:Qt-Object-Inspector.png]]
[[image:Qt-Object-Inspector.png]]
 +
The Style sheet editor will pop up. Now cut and paste this bit of CSS into the editor.  
The Style sheet editor will pop up. Now cut and paste this bit of CSS into the editor.  
-
<source lang="css">
+
 
 +
 
  QPushButton{ background-image: url(:/images/bt_01_off.png);}
  QPushButton{ background-image: url(:/images/bt_01_off.png);}
  QPushButton:pressed {background-image: url(:/images/bt_01_on.png);}
  QPushButton:pressed {background-image: url(:/images/bt_01_on.png);}
Line 66: Line 80:
  #pushButton3 {  }
  #pushButton3 {  }
  #pushButton4 {  }
  #pushButton4 {  }
-
</source>
+
 
This will set up two background images for the push buttons, one for pressed and one for released, this will give nice animated effect on pressing buttons.
This will set up two background images for the push buttons, one for pressed and one for released, this will give nice animated effect on pressing buttons.
 +
 +
2. Now add foreground images to each button by clicking between the curly brackets in the CSS, and then select Add Resource->image from the menu, then select the image you want to add.This will automatically add the CSS for each push button.
2. Now add foreground images to each button by clicking between the curly brackets in the CSS, and then select Add Resource->image from the menu, then select the image you want to add.This will automatically add the CSS for each push button.
 +
[[image:Qt-Select-Resource.png]]
[[image:Qt-Select-Resource.png]]
 +
[[image:Qt-Edit-Stylsheet.png]]
[[image:Qt-Edit-Stylsheet.png]]
 +
Now hit apply and you should have something that looks like this.
Now hit apply and you should have something that looks like this.
 +
[[image:Qt-Buttons.png]]
[[image:Qt-Buttons.png]]
 +
And the CSS in your Stylesheet editor should be this
And the CSS in your Stylesheet editor should be this
-
<source lang="css">
+
 
 +
 
  QPushButton{ background-image: url(:/images/bt_01_off.png);}
  QPushButton{ background-image: url(:/images/bt_01_off.png);}
  QPushButton:pressed {background-image: url(:/images/bt_01_on.png);}
  QPushButton:pressed {background-image: url(:/images/bt_01_on.png);}
Line 87: Line 109:
  #pushButton3 {image: url(:/images/bt_label_03.png); }
  #pushButton3 {image: url(:/images/bt_label_03.png); }
  #pushButton4 {image: url(:/images/bt_label_04.png); }
  #pushButton4 {image: url(:/images/bt_label_04.png); }
-
</source>
+
 
As you can see you don't need to populate the CSS attributes your self, the editor will do this for you.  
As you can see you don't need to populate the CSS attributes your self, the editor will do this for you.  
Just a word on syntax. The Hash refers to a specific object ie pushButton1 etc. No Hash means all instances of that object. That way you don't need to preset the background for each individual button in this example.
Just a word on syntax. The Hash refers to a specific object ie pushButton1 etc. No Hash means all instances of that object. That way you don't need to preset the background for each individual button in this example.
 +
3. Now lets add some background colour. Right Click frame1 in the Object Inspector and change its style-sheet. Select Add Background Colour, and select a colour. Your CSS is automatically populated. Notice that you if you don't use an object name Qt will take it to mean the current object.
3. Now lets add some background colour. Right Click frame1 in the Object Inspector and change its style-sheet. Select Add Background Colour, and select a colour. Your CSS is automatically populated. Notice that you if you don't use an object name Qt will take it to mean the current object.
Line 97: Line 120:
Heres what the css should look like
Heres what the css should look like
-
<source lang="css">
+
 
  background-color: rgb(101, 101, 101);
  background-color: rgb(101, 101, 101);
-
</source>
+
 
4. Last but not least, double click on each of the Button labels and make each button lable a blank.
4. Last but not least, double click on each of the Button labels and make each button lable a blank.
-
==Preview your UI==
+
 
 +
 
 +
===Preview your UI===
Press Control R on your keyboard to preview your work and you have something like this.
Press Control R on your keyboard to preview your work and you have something like this.
 +
[[image:Qt-Preview.png]]
[[image:Qt-Preview.png]]
Line 110: Line 136:
notice how the background images changes when we press the buttons.
notice how the background images changes when we press the buttons.
-
==Compile and Run the UI==
+
 
 +
===Compile and Run the UI===
Save the Ui as customui.ui
Save the Ui as customui.ui
Line 116: Line 143:
Now compile it using pyuic4 using this command
Now compile it using pyuic4 using this command
-
pyuic4 -x customui.ui -o customui.py
+
  pyuic4 -x customui.ui -o customui.py
now run the application
now run the application
Line 137: Line 164:
Now we can run the application using  
Now we can run the application using  
-
python customui.py
+
  python customui.py
 +
 
and presto our ui runs. As Usual the first time you run a Python app it might get a bit slow with lots of images as the system pre compiles the code.
and presto our ui runs. As Usual the first time you run a Python app it might get a bit slow with lots of images as the system pre compiles the code.
The customeui_rc.py contains all of the images our ui needs to run, and as long as we ship that with our main app, everything should work. Now copy customui.py and customui_rc.py to your [[Nokia N900|N900]] and run from a terminal
The customeui_rc.py contains all of the images our ui needs to run, and as long as we ship that with our main app, everything should work. Now copy customui.py and customui_rc.py to your [[Nokia N900|N900]] and run from a terminal
 +
[[image:Qt-N900Customui.png]]
[[image:Qt-N900Customui.png]]
Line 149: Line 178:
TODO, upload full blown ui file of calculator once I can do portrait mode :-)(mikec 12/02/10)
TODO, upload full blown ui file of calculator once I can do portrait mode :-)(mikec 12/02/10)
-
==Additional Resources==
+
===Additional Resources===
* http://doc.trolltech.com/4.5/stylesheet.html Note that not all Qt widgets can be customised through Style Sheets. You can see the full list of widgets and their CSS options here
* http://doc.trolltech.com/4.5/stylesheet.html Note that not all Qt widgets can be customised through Style Sheets. You can see the full list of widgets and their CSS options here

Learn more about Contributing to the wiki.


Please note that all contributions to maemo.org wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see maemo.org wiki:Copyrights for details). Do not submit copyrighted work without permission!


Cancel | Editing help (opens in new window)