PySide 簡易教程<二>-------工欲善其事,必先利其器

OK , 在Linux的開發環境下,對於咱們的簡短的PySide程序而言,不須要使用QtCreator,使用文本編輯器。之因此,使用文本編輯器,是由於小應用代碼量不多,更重要的是一行行的寫能夠加深咱們對於Qt應用的理解。不過,當咱們對整個程序的結構有着比較清晰的認識以後,咱們就只須要將精力關注在那些發生改變的部分便可。在這裏,我推薦VIM和一個叫作snipmate的插件。python

在Hello PySide中,咱們寫了一個經典的Hello World 。 它在個人Fedora上的實現效果以下:編程

感受看起來還不錯,可是這個界面的顯示只是一個QLabel元素,加上Font屬性的 Hello World ,而且顯示在屏幕的左上角。距離咱們想要的東西還差的很遠。vim

我讀大學的時候學習了一門SSD課程,SSD4吧(記不太清楚,好像使用VB)是專門講界面設計的一些原則的課程。一個界面至少應該有標題,大小,菜單欄,工具欄,狀態欄甚至應該具備某些佈局等等,而且要考慮到用戶的一些使用習慣等等,例如獲取焦點,自動切換,以用戶爲中心的人機交互設計。可是對於HelloWorld而言,它沒有自定義的標題,大小是由字體決定等等。萬幸的是,Qt給咱們提供了豐富的元素來建立這些內容,只須要設置好這些元素的規則便可。app

接下來咱們使用Widget來建立一個HelloWorld。它應該具備如下的特色,大小,標題。框架

 1 #!/usr/bin/python
 2 #coding:utf-8
 3 #Filename:WigetHelloWorld.py
 4 
 5 import sys
 6 from PySide.QtCore import *
 7 from PySide.QtGui import *
 8 
 9 app = QApplication(sys.argv)
10 
11 widget = QWidget()
12 widget.resize(250,150)
13 widget.setWindowTitle("Hello World")
14 label = QLabel("<font color=red size=30>Hello world </font>",widget)
15 label.move(50,50)
16 widget.show()
17 
18 sys.exit(app.exec_())

第十一行:使用QWidget建立一個Widget對象編輯器

第十二行:從新設置Widget的大小,寬度250,高度150ide

第十三行:設置窗口標題 Hello World函數

第十四行:在widget上添加一個label,注意要將widget做爲一個參數傳遞給QLabel工具

第十五行:將label移動到距離widget頂端距離50,左邊距離50的位置佈局

效果以下圖:

比第一個寒酸的界面顯得更加大氣一點了。可是咱們的代碼這樣寫就會很亂,若是繼續添加QPushButton,其餘處理等等,不方便管理。既然咱們使用一個QWidget類,何不繼承它,將須要進行的操做放在子類中。這一點和JAVA的界面編程風格相似。因此對以上代碼進行重構:

 1 #!/usr/bin/python
 2 #coding:utf-8
 3 #Filename:WigetHelloWorld.py
 4 
 5 import sys
 6 from PySide.QtCore import *
 7 from PySide.QtGui import *
 8 class Example(QWidget):
 9   def __init__(self):
10     super(Example,self).__init__()
11     self.initUI()
12   def initUI(self):
13     label = QLabel("<font color=red size=30>Hello World</font>",self)
14     label.move(50,50)
15     self.setGeometry(300,300,250,150)
16     self.setWindowTitle("Hello World")
17     self.show()
18 def main():
19   app = QApplication(sys.argv)
20   ex = Example()
21   sys.exit(app.exec_())
22 if __name__ == "__main__":
23   main()

本版本中採用OOP的編程思想:類,數據和方法。這裏建立了一個Example類,Example類繼承QWidget。所以,在構造函數中,須要調用超類的構造函數。

self.setGeometry(300,300,250,150) 
setGeometry的功能主要有兩個:定位Widget在桌面上的位置和設置窗口的大小,前兩個參數設置距離屏幕left和top的距離,後兩個參數設置窗口的高和寬。
 

這樣作的好處就是,能夠是咱們將注意力集中在對整個界面上的編程中,無需關注其餘重複的內容。這也是往下的一個基礎框架,之後全部的程序都將在以下框架的基礎上完成,那麼請在vim插件中的python.snippetst中添加自定義的觸發器,個人配置以下:

 1 snippet #
 2     #!/usr/bin/python
 3     #coding:utf-8
 4     #Filename:${1:filename}
 5 snippet qt
 6     import sys
 7     from PySide.QtCore import *
 8     from PySide.QtGui import *
 9     class ${1:classname}:
10         def __init__(self):
11             super(${2:classname},self).__init__()
12             self.initUI()
13         def initUI(self):
14             ${3:initUI}
15     def main():
16         app = QApplication(sys.argv)
17         ${4:TODO}
18         sys.exit(app.exec_())
19     if __name__ == "__main__":
20         main()

 

打開vim,進入插入模式,輸入#,按下tab,vim就會自動給你補全開篇三行。接下來,輸入qt,按下tab,就會把整個框架放在你的vim中。

相關文章
相關標籤/搜索