雜家雜談  
          日歷
          統(tǒng)計(jì)
          • 隨筆 - 7
          • 文章 - 1
          • 評(píng)論 - 15
          • 引用 - 0

          導(dǎo)航

          留言簿(2)

          隨筆分類(lèi)

          隨筆檔案

          Python

          搜索

          •  

          積分與排名

          • 積分 - 25738
          • 排名 - 1515

          最新評(píng)論

          閱讀排行榜

           
          主窗口
          QMainWindow類(lèi)給我們提供了一個(gè)程序主窗口,使得我們能夠創(chuàng)建一個(gè)標(biāo)準(zhǔn)的程序框架,包括了狀態(tài)欄,工具欄和菜單欄。

          狀態(tài)欄(Statusbar)
          狀態(tài)欄就是一種用來(lái)顯示狀態(tài)信息的小部件.
          ?1?#!/usr/bin/python
          ?2?
          ?3?#?statusbar.py
          ?4?
          ?5?import?sys
          ?6?from?PyQt4?import?QtGui
          ?7?
          ?8?class?MainWindow(QtGui.QMainWindow):
          ?9?????def?__init__(self):
          10?????????QtGui.QMainWindow.__init__(self)
          11?
          12?????????self.resize(250,?150)
          13?????????self.setWindowTitle('statusbar')
          14?????????
          15?????????self.statusBar().showMessage('Ready')
          16?
          17?app?=?QtGui.QApplication(sys.argv)
          18?main?=?MainWindow()
          19?main.show()
          20?sys.exit(app.exec_())
          21?

          self.statusBar().showMessage( ' Ready ' )
          這里需要注意的就是這一句,通過(guò)調(diào)用QMainWindow類(lèi)的statusBar()方法,得到statusbar的句柄,然后調(diào)用showMessage()顯示信息在statusbar上.非常容易吧!

          菜單欄(Menubar)
          菜單是應(yīng)用程序中最常見(jiàn)的一種組件.通常每個(gè)菜單都是完成不同的任務(wù).
          ?1?#!/usr/bin/python
          ?2?
          ?3?#?menubar.py
          ?4?
          ?5?import?sys
          ?6?from?PyQt4?import?QtGui,?QtCore
          ?7?
          ?8?class?MainWindow(QtGui.QMainWindow):
          ?9?????def?__init__(self):
          10?????????QtGui.QMainWindow.__init__(self)
          11?????????
          12?????????self.resize(250,?150)
          13?????????self.setWindowTitle('menubar')
          14?????????
          15?????????exit?=?QtGui.QAction(QtGui.QIcon('icons/web.png'),?'Exit',?self)
          16?????????exit.setShortcut('Ctrl+Q')
          17?????????exit.setStatusTip('Exit?application')
          18?????????self.connect(exit,?QtCore.SIGNAL('triggered()'),?QtCore.SLOT('close()'))
          19?????????
          20?????????self.statusBar()
          21?
          22?????????menubar?=?self.menuBar()
          23?????????file?=?menubar.addMenu('&File')
          24?????????file.addAction(exit)
          25?
          26?app?=?QtGui.QApplication(sys.argv)
          27?main?=?MainWindow()
          28?main.show()
          29?sys.exit(app.exec_())
          30?

          menubar? = ?self.menuBar()
          file?
          = ?menubar.addMenu( ' &File ' )
          file.addAction(exit)
          首先調(diào)用self.menuBar()創(chuàng)建菜單欄,接著調(diào)用addMenu()添加一個(gè)菜單,最后給菜單添加一個(gè)動(dòng)作,就是這里的exit.

          工具欄(Toolbar)
          菜單可以將不同的命令按組分類(lèi),然而,有些常用的命令就可以通過(guò)工具欄來(lái)放置,這樣更便于使用.
          ?1?#!/usr/bin/python
          ?2?
          ?3?#?toolbar.py
          ?4?
          ?5?import?sys
          ?6?from?PyQt4?import?QtGui,?QtCore
          ?7?
          ?8?class?MainWindow(QtGui.QMainWindow):
          ?9?????def?__init__(self):
          10?????????QtGui.QMainWindow.__init__(self)
          11?????????
          12?????????self.resize(250,?150)
          13?????????self.setWindowTitle('toolbar')
          14?????????
          15?????????self.exit?=?QtGui.QAction(QtGui.QIcon('icons/web.png'),?'Exit',?self)
          16?????????self.exit.setShortcut('Ctrl+Q')
          17?????????self.connect(self.exit,?QtCore.SIGNAL('triggered()'),?QtCore.SLOT('close()'))
          18?
          19?????????self.toolbar?=?self.addToolBar('Exit')
          20?????????self.toolbar.addAction(self.exit)
          21?
          22?app?=?QtGui.QApplication(sys.argv)
          23?main?=?MainWindow()
          24?main.show()
          25?sys.exit(app.exec_())

          self.exit? = ?QtGui.QAction(QtGui.QIcon( ' icons/web.png ' ),? ' Exit ' ,?self)
          self.exit.setShortcut(
          ' Ctrl+Q ' )
          GUI程序是通過(guò)命令來(lái)控制的, 而這些命令可以由菜單,上下文菜單,工具欄或者快捷鍵來(lái)發(fā)出.? PyQt將命令抽象為actions. 一個(gè)action對(duì)象可以有text, 圖標(biāo), 快捷鍵, 狀態(tài)欄描述, "What's This?"描述和tooltip. 上面的例子,就定義了icon, tooltip和shortcut.
          self.connect(self.exit,?QtCore.SIGNAL( ' triggered() ' ),?QtCore.SLOT( ' close() ' ))
          這一句,將action的triggered()信號(hào)和預(yù)先定義的close()槽結(jié)合到一起.
          self.toolbar? = ?self.addToolBar( ' Exit ' )
          self.toolbar.addAction(self.exit)
          然后就將定義好的action放入toolbar就可以了.
          toolbar.png
          Figure: toolbar

          一個(gè)完整的程序

          最后這個(gè)部分,將menubar, toolbar和statusbar放在一起.
          ?1?#!/usr/bin/python
          ?2?
          ?3?#?mainwindow.py
          ?4?
          ?5?import?sys
          ?6?from?PyQt4?import?QtGui,?QtCore
          ?7?
          ?8?class?MainWindow(QtGui.QMainWindow):
          ?9?????def?__init__(self):
          10?????????QtGui.QMainWindow.__init__(self)
          11?
          12?????????self.resize(350,?250)
          13?????????self.setWindowTitle('mainwindow')
          14?????????
          15?????????textEdit?=?QtGui.QTextEdit()
          16?????????self.setCentralWidget(textEdit)
          17?
          18?????????exit?=?QtGui.QAction(QtGui.QIcon('icons/web.png'),?'Exit',?self)
          19?????????exit.setShortcut('Ctrl+Q')
          20?????????exit.setStatusTip('Exit?application')
          21???????? self.connect(exit,?QtCore.SIGNAL('triggered()'),?QtCore.SLOT('close()'))
          22?????????
          23?????????self.statusBar()
          24?????????
          25?????????menubar?=?self.menuBar()
          26?????????file?=?menubar.addMenu('&File')
          27?????????file.addAction(exit)
          28?????????
          29?????????toolbar?=?self.addToolBar('Exit')
          30?????????toolbar.addAction(exit)
          31?
          32?app?=?QtGui.QApplication(sys.argv)
          33?main?=?MainWindow()
          34?main.show()
          35?sys.exit(app.exec_())
          36?

          textEdit? = ?QtGui.QTextEdit()
          self.setCentralWidget(textEdit)
          這里創(chuàng)建了一個(gè)edit部件,并將其設(shè)置為QMainWindow的中央部件.中央部件就是說(shuō)要占據(jù)初菜單,工具欄,狀態(tài)欄之外的所有空間.




          posted on 2008-07-26 12:08 glorywine 閱讀(3864) 評(píng)論(5)  編輯  收藏 所屬分類(lèi): Python
          評(píng)論:
          • # re: PyQt4 - (3) 菜單和工具欄  隔葉黃鶯 Posted @ 2008-07-28 10:43
            用 QT 還不如用 SWT,在 Unix/Linux 下一般都有 JVM,SWT的jar(含 dll)文件都不大。

            在 Unix/Linux 也有 Python,但是 QT 的安裝在 Windows 下稍麻煩,動(dòng)態(tài)庫(kù)也大,QT 在 GNOME 下又沒(méi)有。  回復(fù)  更多評(píng)論   

          • # re: PyQt4 - (3) 菜單和工具欄  glorywine Posted @ 2008-07-28 16:58
            @隔葉黃鶯
            我曾經(jīng)也非常熱衷于SWT,后來(lái)感覺(jué)java的開(kāi)發(fā)效率實(shí)在是不敢恭維,代碼量太大了。
            喜歡python就是因?yàn)樗暮?jiǎn)潔。
            當(dāng)然這個(gè)是仁者見(jiàn)仁了。
            Qt在windows下已經(jīng)有基于gpl的二進(jìn)制包了,安裝起來(lái)非常方便。  回復(fù)  更多評(píng)論   

          • # re: PyQt4 - (3) 菜單和工具欄  隔葉黃鶯 Posted @ 2008-07-29 00:18
            Qt 的動(dòng)態(tài)庫(kù)還是很大的

            我一直用的都是類(lèi) C/C++ 代碼風(fēng)格的語(yǔ)言,像 python/ruby/groove 這種風(fēng)格的不習(xí)慣。

            所以我也曾經(jīng)在 vxWidgets、Qt、SWT 這三個(gè)跨平臺(tái)組件中選來(lái)選去,還是喜歡上了 SWT。雖然說(shuō) Qt和vxWidgets可以用C++編程,是所謂的本地代碼,執(zhí)行效率會(huì)高一些,但是他們的動(dòng)態(tài)庫(kù)比SWT的class+dll還要大。Qt 對(duì)于某些系統(tǒng)沒(méi)有的對(duì)等控件也是像 SWT 一樣自己來(lái)描繪的。

            其他跨平臺(tái)的如 GTK/GTK++, 和 TCL 配對(duì)的 TK 就只是作了解的。  回復(fù)  更多評(píng)論   

          • # re: PyQt4 - (3) 菜單和工具欄  隔葉黃鶯 Posted @ 2008-07-31 14:10
            @glorywine
            Qt在windows下已經(jīng)有基于gpl的二進(jìn)制包了,哪有這個(gè)下載?  回復(fù)  更多評(píng)論   

          • # re: PyQt4 - (3) 菜單和工具欄[未登錄](méi)  glorywine Posted @ 2008-07-31 19:20
            你可以在這里下載,這個(gè)是官網(wǎng)上的.
            http://www.riverbankcomputing.co.uk/software/pyqt/download  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © glorywine Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 咸阳市| 陵川县| 阜新| 古交市| 梅州市| 清远市| 永泰县| 平江县| 玛沁县| 海城市| 卓尼县| 烟台市| 宁阳县| 惠安县| 通化市| 建德市| 永定县| 罗源县| 孙吴县| 金坛市| 麦盖提县| 武川县| 宁河县| 南开区| 措美县| 罗山县| 固阳县| 咸宁市| 平和县| 会理县| 襄汾县| 北海市| 汾西县| 昌乐县| 威信县| 称多县| 天水市| 防城港市| 丰原市| 禹城市| 松潘县|