pyqt4精彩實(shí)例分析26個(gè)例子_第1頁(yè)
pyqt4精彩實(shí)例分析26個(gè)例子_第2頁(yè)
pyqt4精彩實(shí)例分析26個(gè)例子_第3頁(yè)
pyqt4精彩實(shí)例分析26個(gè)例子_第4頁(yè)
pyqt4精彩實(shí)例分析26個(gè)例子_第5頁(yè)
已閱讀5頁(yè),還剩127頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)例1實(shí)例1Hello 標(biāo)準(zhǔn)對(duì)話框的使 各類位置信 使用標(biāo)準(zhǔn)輸入 各種消息框的使 實(shí)現(xiàn)QQ抽屜效 表格的使 使用進(jìn)度 利用QtDesigner設(shè)計(jì)一個(gè)對(duì)話 在程序中使用 動(dòng)態(tài)加載 基本布局管 多文 分割窗 ??看?堆棧窗 綜合布局實(shí) 可擴(kuò)展對(duì)話 利用QPalette改變控件顏 窗體的淡入淡出效 不規(guī)則窗 電子 程序啟動(dòng)畫 基本QMainWindow主窗口程 打印文 打印圖 1HelloPyQt42010-12-0217:0127231HelloPyQt42010-12-0217:012723評(píng)論(8)本實(shí)例實(shí)現(xiàn)一個(gè)"HelloKitty!"例子,簡(jiǎn)單介紹Qt編程的基本流程Qt程序的編繹運(yùn)方式,實(shí)例效果圖如圖所示這是一個(gè)簡(jiǎn)單的例子,整個(gè)對(duì)話框只有一個(gè)按鈕,單擊該按鈕,對(duì)話框關(guān)閉,退出程序?qū)崿F(xiàn)代碼如下[python]view1.fromPyQt4.QtGuiimport*2.fromPyQt4.QtCoreimport*3.importsys1行導(dǎo)入PyQt4.QtGui的所有類及模塊,包括QApplicationQt圖形化應(yīng)用程序必須包含此文件,它包含了Qt圖形化應(yīng)用程序的各種資源,基本設(shè)置,控制流以第5行新創(chuàng)建了一個(gè)QApplication對(duì)象,每個(gè)Qt應(yīng)用程序都必須有且只有一個(gè)對(duì)象作為參數(shù),便于程序處理命令行參數(shù)6行創(chuàng)建了一QPushButton對(duì)象,并設(shè)置6行創(chuàng)建了一QPushButton對(duì)象,并設(shè)置它的顯示文本為“HelloKitty!”,由于此處沒(méi)有指定按鈕的父窗體,因此以自己作為主窗第7行調(diào)用show()方法,顯示此按鈕。控件被創(chuàng)建時(shí),默認(rèn)是不顯示的,必須調(diào)用函數(shù)來(lái)顯示它8行的connect方法是Qt最重要的特號(hào)與槽的機(jī)制。當(dāng)按鈕被按下則觸發(fā)信號(hào),與之相連的Qlicini()最后調(diào)的exec_()方法,程序進(jìn)入消息循環(huán),等待可能輸入進(jìn)行響應(yīng)。完成事件處理及顯示的工作,并在應(yīng)用程序退出時(shí)返回exec_()最后執(zhí)行程序即可出現(xiàn)上圖所示的對(duì)話框,一個(gè)簡(jiǎn)單的Kitty!例子完成信號(hào)與槽機(jī)制作為Qt 最重要的特性,提供了任意兩個(gè)Qt 現(xiàn)對(duì)象間通信要簡(jiǎn)單靈活得多。每個(gè)Qt信號(hào)與槽機(jī)制常用的連接方式為signal為對(duì)象Object1的信號(hào),slot為對(duì)象Object2的槽,Qt的窗口部件都包含若干個(gè)預(yù)定也可以根據(jù)需要定義自己的信號(hào)和信號(hào)與槽機(jī)制可以有多種連接方式,下圖描述了信號(hào)與槽的多種可能連接方式1.一個(gè)信號(hào)可以與另一個(gè)信即表1.一個(gè)信號(hào)可以與另一個(gè)信即表Object1的信1發(fā)射可以觸發(fā)Object2的信1發(fā)射2.表示一個(gè)信號(hào)可以與多個(gè)3.表示同一個(gè)槽可以響應(yīng)多windows版PyQt4可以這么寫:這樣就少了一些hardcode的字符串了,更加 標(biāo)準(zhǔn)對(duì)話框的 標(biāo)準(zhǔn)對(duì)話框的使PyQt42010-12-0310:342105評(píng)論(2)和大多數(shù)操作系統(tǒng)一樣,WindowsLinux都提供了一系列的標(biāo)準(zhǔn)對(duì)話框,如文件選擇,字體選擇,顏色選擇等,這些標(biāo)準(zhǔn)對(duì)話框?yàn)閼?yīng)用程序提供了一致的觀感。Qt對(duì)這些標(biāo)準(zhǔn)對(duì)字體的選擇。標(biāo)準(zhǔn)對(duì)話框在軟件設(shè)計(jì)過(guò)程中是經(jīng)常需要使用Qt 本實(shí)例主要演示上面幾種標(biāo)準(zhǔn)對(duì)話框的使用,如下圖所“”“”“框”按鈕,會(huì)彈出字體選擇對(duì)話框,選中的字體將更新右邊顯示的字符串實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.classdefinitsuper(StandardDialog,self).initself.setWindowTitle("StandardfontPushButton=QPushButton(self.tr("字體對(duì)話框self.fontLineEdit=QLineEdit("Hellodefs=QFileDialog.getOpenFileName(self,"Openfiledefdefifc.isValid():defifok:6行設(shè)tr方法utf8編碼來(lái)解析文字13行設(shè)置程序1517行創(chuàng)建各個(gè)按鈕控件19行創(chuàng)建一QLineEdit類實(shí)例fileLineEdit,用來(lái)顯示選擇的文件名第20行創(chuàng)建一QFrame類實(shí)例colorFrame,當(dāng)用戶選擇不同的根據(jù)用戶選擇的顏色更新其背景會(huì)23行創(chuàng)建一QLineEdit類實(shí)例fontLineEdit,當(dāng)用戶選擇不同會(huì)根據(jù)用戶選擇的字體更新其內(nèi)2533行將各個(gè)控件進(jìn)行布局3537行將各個(gè)按鈕的clicked信號(hào)相應(yīng)的槽進(jìn)行連接slotFile()clickedgetOpenFileName() slotFile()clickedgetOpenFileName() QStringgetOpenFileName(QWidgetparent=None,QStringcaption=QString(),QStringdirectory=QString(),QStringfilter=QString(),Optionsoptions=0)QStringgetOpenFileName(QWidgetparent=None,QStringcaption=QString(),directory=QString(),QStringfilter=QString(),QStringselectedFilter=None,Optionsoptions=0)getOpenFileName()函數(shù)將創(chuàng)建一個(gè)模態(tài)的文件對(duì)話框,如下圖所示。directory參數(shù)directory參數(shù)對(duì)文件類型進(jìn)行過(guò)濾,只有與過(guò)濾器匹配的文件類型才顯示,filter過(guò)濾方式供用戶選過(guò)濾器之間用";;"隔開選擇的過(guò)濾器通過(guò)參返回類還提供了類似的其他靜態(tài)函數(shù),如下表,通過(guò)這些函數(shù),用戶可以方便地制自己的文件對(duì)話slotColor()函數(shù)是顏色對(duì)話框按鈕clicked信號(hào)的槽。其getColor()是slotColor()函數(shù)是顏色對(duì)話框按鈕clicked信號(hào)的槽。其getColor()是QColorDialog的個(gè)靜態(tài)函數(shù),返回用戶選擇的顏色值,函數(shù)形式如下QColorQColorDialog.getColor(QColorinitial=Qt.white,QWidgetparent=調(diào)用getColor()函數(shù)將創(chuàng)建一個(gè)模態(tài)的顏色對(duì)話框,如下圖所示。initial 顏色,默認(rèn)為白色,通過(guò)isValid()可以判斷用戶選擇的顏色是否有效,若用戶選擇取消,slotFont()函數(shù)是字體對(duì)話框按clicked信號(hào)的槽。其中g(shù)etFont()是QFontDialog靜態(tài)函數(shù),返回用戶選擇的字體,函數(shù)形式如(QFont,bool)getFont(QFont,(QFont,bool)getFont(QFont,QWidget,QString,FontDialogOptions)(QFont,bool)getFont(QFont,QWidget,QString)(QFont,bool)getFont(QFont,QWidgetparent=(QFont,bool)getFont(QWidgetparent=戶選擇的字體,True),否則返回(默認(rèn)字體OK,函數(shù)返回(3各類位置信PyQt42010-12-0417:071226評(píng)論(0)Qt提供了很多關(guān)于獲取窗體位置及顯示區(qū)域大小的函數(shù),本實(shí)例利用一個(gè)簡(jiǎn)單的對(duì)話框顯(),(),s(),rc(),i(),emer()情況下應(yīng)使用哪個(gè)函數(shù)來(lái)獲取位置信息。實(shí)現(xiàn)的效果如下圖(),(),rmeGme(),(),rmeGmer(),ps(),omr(),ih(),hei(),rc(),si()數(shù)均是Wit信息顯示也相應(yīng)地發(fā)生變化,從變化中可得知各函數(shù)之間的區(qū)別由于本實(shí)例的目的是為了分析各函數(shù)之間的區(qū)別并獲得結(jié)論,而程序本身的實(shí)現(xiàn)較為簡(jiǎn)單因些只簡(jiǎn)單介紹實(shí)現(xiàn)過(guò)程。實(shí)現(xiàn)代碼如下[python]view1.fromPyQt4.QtCoreimport*2.fromPyQt4.QtGuiimport*3.importsysdefinitsuper(Geometry,self).initdefdefdef程序程序初始化時(shí)調(diào) updateLabel()函數(shù),以獲得各位置函數(shù)的信息并顯示updateLabel()函數(shù)負(fù)責(zé)調(diào)用各個(gè)位置函數(shù)獲得結(jié)果并顯示重定義 的moveEvent()和resizeEvent()函數(shù),分別響應(yīng)對(duì)話框的移動(dòng)事件和調(diào)大小事件,使得窗體在被移動(dòng)或窗體大小發(fā)生改變時(shí),能同步更新各函數(shù)結(jié)果的顯示通過(guò)這個(gè)例子可以獲得如下圖所示的結(jié)論(),()和ps()rmeGmer()與mr()rmGomr()mr()函數(shù)獲得i()和it()是中央?yún)^(qū)域的長(zhǎng)和寬的值還有兩個(gè)函數(shù)rect()和size()用還有兩個(gè)函數(shù)rect()和size()用它們獲得的結(jié)果也都是對(duì)于窗體的中央?yún)^(qū)域而言size()rc()與mr()Qct一樣,geometry()獲得的左上頂點(diǎn)坐標(biāo)是相對(duì)于父窗體而言的坐標(biāo),點(diǎn)坐標(biāo)始終為(0,0)rect()獲得的左上應(yīng)用中需根據(jù)情況使用正確的位置信息函數(shù)以獲得準(zhǔn)確的位置尺寸信尤是在編寫對(duì)位置精度要求較高的程序時(shí),如地圖瀏覽程序,更應(yīng)注意函數(shù)的選擇,避免產(chǎn)不必要的誤差在編寫程序時(shí),初始化窗體時(shí)最好不要使用setGeometry()函數(shù),而用resize()和move()數(shù)代替,因?yàn)槭箂etGeometry()show()之后在錯(cuò)誤的位置上停留很短暫的一段4使用標(biāo)準(zhǔn)輸入PyQt42010-12-0417:471514評(píng)論(3)本實(shí)例演示如何使用標(biāo)準(zhǔn)輸入框,Qt提供了一個(gè)QInputDialog類,QInputDialog類提供了是一個(gè)字符串,一個(gè)Int類型數(shù)據(jù)double類型數(shù)據(jù)或是一個(gè)下拉列表框的條目。其中Int類型或double類型,則為一QSpinBox,若是調(diào)用列表?xiàng)l目輸入框,則為一個(gè)QComboBox,還包括一個(gè)確定輸入(Ok)按鈕和一個(gè)取消輸入(Cancel)按鈕本實(shí)例的實(shí)現(xiàn)效果如下圖實(shí)例中列舉了以上 種輸入類型,右則的按鈕用于彈出標(biāo)準(zhǔn)輸入對(duì)話框修改各條信息的值具體實(shí)現(xiàn)代碼如下所示[python]view1.#-*-coding:utf-8[python]view1.#-*-coding:utf-8-2.fromPyQt4.QtCoreimport*3.fromPyQt4.QtGuiimport*4.importsys8.classdefinitsuper(InputDlg,self).initlabel1=QLabel(self.tr"))label2=QLabel(self.tr"))label4=QLabel(self.tr("身高Label=QLabel("TengWei")self.setWindowTitle(self.tr("資料收集defslotName(self):ifokand(notdefslotSex(self):list.append(self.tr("男l(wèi)ist.append(self.tr("女sex,ok=QInputDialog.getItem(self,self.tr("性別"),self.tr("請(qǐng)選擇性別ifdefslotAge(self):ifdefslotStature(self):if構(gòu)造函數(shù)中聲明了對(duì)話框中用到的控件以及各按鈕觸發(fā)的槽函數(shù)單擊姓名后的修改按鈕觸發(fā)slotName()函數(shù),彈出標(biāo)準(zhǔn)字符串輸入對(duì)話框,如下圖調(diào)用(QString,boolok)QInputDialog.getText(QWidget,QString,QString,QLineEdit.EchoModemode=QLineEdit.Normal,QStringtext=QString(),Qt.WindowFlagsflags=0)此函數(shù)的第一個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的父窗口,第二個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)題名第三個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的第三個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)簽提示,第四個(gè)參數(shù)指定標(biāo)準(zhǔn)輸入對(duì)話框QLineEdit控件的輸入模式,第五個(gè)參數(shù)text為標(biāo)準(zhǔn)字符串輸入對(duì)話框彈出時(shí)QLineEdit件默認(rèn)出現(xiàn)的文字,最后一個(gè)參數(shù)指明標(biāo)準(zhǔn)輸入對(duì)話框的窗體標(biāo)識(shí)slotName()函數(shù)中的第3行判ok的值,若用戶單擊了“OK”按鈕,則把新輸入的姓名更至顯示標(biāo)簽單擊性別后的修改按鈕觸發(fā)slotSex()函數(shù),彈出標(biāo)準(zhǔn)條目選擇對(duì)話框,如下第1,2,3行創(chuàng)建一個(gè)QStringList對(duì)象,包括兩個(gè)QString項(xiàng),用于標(biāo)準(zhǔn)輸入對(duì)話框中下列表框的條目顯示第4行調(diào)用QInputDialog的getItem()函數(shù)彈出標(biāo)準(zhǔn)條目選擇對(duì)話框,getItem()函數(shù)原型下(QString,boolok)getItem(QWidget,QString,QString,QStringList,intcurrent=0,booleditable=True,Qt.WindowFlagsflags=0)此函數(shù)的第一個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的父窗窗口,第二個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)名,第三個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)簽提示,第四個(gè)參數(shù)指定標(biāo)準(zhǔn)輸入對(duì)話框QComboBox控件顯示的可選條目,為QStringList五個(gè)參數(shù)current為標(biāo)準(zhǔn)條目選擇對(duì)話框彈出時(shí)QComboBoxeditable指定QComboBox控件中顯示的文字是否可編輯,最后一個(gè)參數(shù)指明標(biāo)準(zhǔn)輸入對(duì)話框的窗體標(biāo)識(shí)第6行判斷ok的值,若用戶單擊了“OK”按鈕,則把新輸入的性別更新至顯示標(biāo)簽單擊年齡后的修改按鈕觸發(fā)slotAge()函數(shù),彈出標(biāo)準(zhǔn) 類型輸入對(duì)話框,如下圖調(diào)用QInputDialog的getInteger()函數(shù)彈出標(biāo)調(diào)用QInputDialog的getInteger()函數(shù)彈出標(biāo)準(zhǔn)int類型輸入對(duì)話框,getInteger()函數(shù)原如下(int,boolok)getInteger(QWidget,QString,QString,intvalue=0,intmin=-2147483647,intmax=2147483647,intstep=1,Qt.WindowFlagsflags=0)此函數(shù)的第一個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的父窗窗口,第二個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)QSpinBox控件默認(rèn)顯示值,第五六個(gè)參數(shù)指定QSpinBox控件的數(shù)值范圍,第七個(gè)參數(shù)step指定QSpinBox控件的步進(jìn)值。第4行判斷ok的值,若用戶單擊了“OK”按鈕,則把新輸入的年齡值更新至顯示標(biāo)簽單擊身高后的修改按鈕觸發(fā)slotStature()函數(shù),彈出標(biāo)準(zhǔn)double類型輸入對(duì)話框,如下圖調(diào)用QInputDialog的getDouble函數(shù)彈出標(biāo)準(zhǔn)double類型輸入對(duì)話框,getDouble()函原型如下(float,boolok)getDouble(QWidget,QString,QString,floatvalue=0,floatmin-2147483647,floatmax=2147483647,intdecimals=1,Qt.WindowFlagsflags=此函數(shù)的第一個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的父窗窗口,第二個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的名,第三個(gè)參數(shù)為標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)簽提示,第四個(gè)參數(shù)value指定標(biāo)準(zhǔn)輸入QSpinBox控件默認(rèn)顯示值,第五六個(gè)參數(shù)指定QSpinBox控件的數(shù)值范圍,第七個(gè)decimals指定QSpinBox第4行判斷ok的值,若用戶單擊了“OK”按鈕,則把新輸入的身高值更新至顯示標(biāo)簽python3.1中str對(duì)象沒(méi)有isEmpty屬性了,直接用name!=None似乎也可以吧,初學(xué),誤解之處請(qǐng)指正QStringList,我的PyQt4.81python3.1中str對(duì)象沒(méi)有isEmpty屬性了,直接用name!=None似乎也可以吧,初學(xué),誤解之處請(qǐng)指正QStringList,我的PyQt4.81文檔里的是存在,但是是C++版的QT文檔?;貜?fù)sorry,PyQtGPLv4.7.7forPython4.8.X當(dāng)中沒(méi)有QStringList直接使用了List的話,那就更好了,比使用QStringList 各種消息框的使PyQt42010-12-0418:561397評(píng)論(0)在實(shí)際的程序開發(fā)中,經(jīng)常會(huì)用到各種各樣的消息框來(lái)給用戶一些提示或提醒提供QMessageBox類來(lái)實(shí)現(xiàn)此項(xiàng)功能。在本實(shí)例中,分析了各種消息框的使用方式及之間的別。各種消息框的使用如圖所示實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-ReChumpKlutz2010-12-2012:44[回復(fù)1alicehyxx2010-12-2011:11[回復(fù)2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.classdefinit(self,parent=None):super(MessageBoxDlg,self).init(parent)self.label=QLabel("AboutQtMessageBox")warningButton=QPushButton("Warning")aboutqtButton=QPushButton("AboutQt")gridLayout.addWidget(self.label,0,0,1,2)gridLayout.addWidget(questionButton,1,0)gridLayout.addWidget(warningButton,2,0)gridLayout.addWidget(criticalButton,2,1)gridLayout.addWidget(aboutButton,3,0)gridLayout.addWidget(aboutqtButton,3,1)gridLayout.addWdefslotQuestion(self):self.tr("已到達(dá)文檔結(jié)尾,是否從頭查找ifbutton==QMessageBox.Ok:elifbutton==QMessageBox.Cancel:defslotInformation(self):self.tr("填寫任意想告訴于用戶的信息self.label.setText("InformationdefslotWarning(self):ifbutton==QMessageBox.Save:elifbutton==QMessageBox.Discard:elifbutton==QMessageBox.Cancel:defself.label.setText("CriticalMessageBox")defslotAbout(self):self.label.setText("AboutdefQMessageBox.aboutQt(self,"AboutQt")defslotCustom(self):customMsgBox.setText(self.tr("這是一個(gè)自定義消息框ifbutton==lockButton:elifbutton==unlockButton:elifbutton==cancelButton:本實(shí)例主要7種類型的消息框,包括本實(shí)例主要7種類型的消息框,包括Question消息框,Information消息框,Warning消息框,Critical消息框,About消息框,AboutQt消息框以及Custom自定義消息框。Question消息框,Information消息框,Warning消息框和Critical消息框的用法大同小異,這些消息框一般都包含一條提示信息,一個(gè)圖標(biāo)以及若干個(gè)按鈕,它們的作用都是給用戶提一些提醒或一些簡(jiǎn)單的詢問(wèn)。按圖標(biāo)的不同可區(qū)分為以4個(gè)級(jí)另下面分別對(duì)各種消息框的使用方法進(jìn)行分Question:下圖Question消息框關(guān)于消息框,調(diào)用時(shí)直接使用QMessageBox.question()即可第一個(gè)參數(shù)為消息框的父窗口指第二個(gè)參數(shù)為消息框的標(biāo)題欄第三個(gè)參數(shù)為消息框的文字提示信息,前 個(gè)參數(shù)對(duì)于其他幾種消息框基本是一樣的后面兩個(gè)參數(shù)都是對(duì)消息框按鈕類提供了許多標(biāo)準(zhǔn)按鈕, 等,具體可查問(wèn) 幫助第四個(gè)參數(shù)即填寫希望在消息框中出現(xiàn)的按鈕,可根據(jù)需要在標(biāo)準(zhǔn)按鈕中選擇,用“|”連寫默認(rèn)為QMessageBox.Ok第五個(gè)參數(shù)為默認(rèn)按鈕,即消息框出現(xiàn)時(shí),焦點(diǎn)默認(rèn)處于哪個(gè)按鈕上函數(shù)的返回值為按下的按鈕戶按下Escape當(dāng)于返函數(shù)的返回值為按下的按鈕戶按下Escape當(dāng)于返回QMessageBox.Cancel如下圖所示為Information消息框消息框使用頻率最高也最簡(jiǎn)單,直接調(diào)用QMessageBrmation()第一個(gè)參數(shù)為消息框的父窗口指第二個(gè)參數(shù)為消息框的標(biāo)題欄第三個(gè)參數(shù)為消息框的文字提示信息后面的兩個(gè)參數(shù)與消息框的用法在使用的過(guò)程中,經(jīng)常會(huì)省略后兩個(gè)參數(shù)直接使用默認(rèn)的 按鈕Information消息框Question消息框可以通用,使用權(quán)Question消息框的地方都可以Information消息如下圖所示為Warning消息框消息框的最常用法為當(dāng)用戶進(jìn)行了一個(gè)非正常操作時(shí),提醒用戶并詢問(wèn)是否進(jìn)行項(xiàng)操作,如關(guān)閉文檔,提醒并詢問(wèn)用戶是否保存對(duì)文檔的修改。實(shí)例中實(shí)現(xiàn)的即是此操作函數(shù)調(diào)用的方式與前面消息框的調(diào)用方式大致相同第一個(gè)參數(shù)為消息框的父窗口指第二個(gè)參數(shù)為消息框的標(biāo)題欄第三個(gè)參數(shù)為消息框的文字提示第三個(gè)參數(shù)為消息框的文字提示信息第四個(gè)參數(shù)為希望在消息框中出現(xiàn)的按鈕,可根據(jù)需要在標(biāo)準(zhǔn)按鈕中選擇,用“|”連寫,默為QMessageBox.Ok第五個(gè)參數(shù)為默認(rèn)按鈕,即消息框出現(xiàn)時(shí),焦點(diǎn)默認(rèn)處于哪個(gè)按鈕上如下圖所示為Critical消息框 消息框是在系統(tǒng)出現(xiàn)嚴(yán)重錯(cuò)誤時(shí)對(duì)用戶進(jìn)行提醒的。它的用法也相對(duì)簡(jiǎn)單,通常況下和Information消息框一樣,在調(diào)用時(shí)只填寫前3個(gè)參數(shù)即可如下圖所示為About消息框About消息框一般用于提供系統(tǒng)的版本等信息。只需提供信息而并不需要用戶反饋信息,此它的用法相對(duì)簡(jiǎn)單,直接調(diào)用Qsseoab()在介紹完以上幾種基本消息框的用法后,還有兩種特殊的消息框類型,分別是息框”以及自定義消息框 如下圖所示為AboutQt消息框“AboutQt消息框”“AboutQt消息框”Qt預(yù)定好的一種消息框,用于提Qt的相關(guān)信息,只需直接調(diào)QMessageBox.aboutQt(),并提定父窗口和標(biāo)題欄即可內(nèi)容是Qt預(yù)定義好的最后,當(dāng)以上所有的消息框都不能滿足開發(fā)的需求時(shí) 還允許自定義消息框的自定義消息框在slotCustom()84行首先創(chuàng)建一個(gè)QMessageBox對(duì)象customMsgBox。第行設(shè)置此消息框的標(biāo)題欄為Custommessagebox第-0行定義消息框所需的按鈕,因此Qssoxdt()dt()為按鈕類型的描述,具體可查閱QsseoBonRldton()函0行在消息框中加入了一個(gè)QsseoCcel消息框?qū)?huì)按調(diào)用addButton()的先后次序在消息框中由左至右依次插入按鈕第92行調(diào)用setText設(shè)置自定義消息框中第92行調(diào)用setText設(shè)置自定義消息框中顯示的提示信息內(nèi)容第93行調(diào)用exec()顯示此自定義消息后面幾行代碼完成的都是實(shí)例中一些顯示的功能,此處不再討論通過(guò)本實(shí)例的分析可見(jiàn)提供的消息框類型基本涵蓋了開發(fā)應(yīng)用中使用的各種情況,且提供了自定義消息框的方式,滿足各種特殊的需求,在實(shí)際應(yīng)用中關(guān)鍵是分析實(shí)際的應(yīng)需求,根據(jù)不同的應(yīng)用環(huán)境選擇最合適的消息框,以使程序簡(jiǎn)潔而合理6QQ抽屜效PyQt42010-12-0422:481533評(píng)論(4)司的QQ軟件,抽屜效果可以以一種動(dòng)態(tài)直觀的方式在有限大小的界面上擴(kuò)展出更多功能。本實(shí)例在下實(shí)現(xiàn)抽屜效果,如下圖所示具體實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.classdefinitsuper(MyQQ,self).inittoolButton1_4.setText(self.tr("張三虎toolButton3_2.setText(self.tr("張三瘋self.addItem(groupbox3,self.tr("黑名單來(lái)實(shí)現(xiàn)一種抽屜效果,QToolButton提供了一種快速訪問(wèn)命令或選擇項(xiàng)的按鈕,通常在工具第75行創(chuàng)建了一QGroupBox類實(shí)例,在本例中對(duì)應(yīng)每一個(gè)抽屜12行創(chuàng)建了一QToolButton類實(shí)例QToolButton分別對(duì)應(yīng)于抽屜中的每一按鈕第13-15行對(duì)按鈕的文字,圖標(biāo)以及大小等進(jìn)行設(shè)第第和圖標(biāo)的顯示方式。Qt定義了4種QToolButtonStyle類型,分別介紹如下Qt.ToolButtonIconOnly:只顯示圖標(biāo)Qt.ToolButtonTextOnly:只顯示文字Qt.ToolButtonTextBesideIcon:文字顯示在圖標(biāo)旁邊Qt.ToolButtonTextUnderIcon:文字顯示在圖標(biāo)下面程序員可以根據(jù)顯示需要調(diào)整顯示方式第76行創(chuàng)建一QVBoxLayout類實(shí)例,用來(lái)設(shè)置抽屜內(nèi)各按鈕的布局第77,78行設(shè)置布局中各按鈕的顯示間距和顯示位置79-83行將抽屜內(nèi)的各個(gè)按鈕加入第84行調(diào)用addStretch()方法在第84行調(diào)用addStretch()方法在按鈕之后插入一個(gè)占位符,使得所有按鈕能靠上對(duì)齊。且在整個(gè)抽屜大小發(fā)生改變時(shí),保證按鈕的大小不發(fā)生變化其它行都是實(shí)現(xiàn)類似的功能第100-102行把準(zhǔn)備好的抽屜插入至QToolBox中7表格的使PyQt42010-12-0516:261451評(píng)論(1)Qt使用QTlWgt圖所示為“表格的使用”TlWigt類提供了一個(gè)靈活的和可編輯的表格控件,包含很多AP,可以處理標(biāo)題,QTlWigt可以嵌入編輯框或顯示控件,并可通過(guò)拖動(dòng)控制控件,這樣給表格的使用帶來(lái)了很好的擴(kuò)展性本實(shí)例的實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*fromPyQt4.QtCoreimportimport8.class8.classdefinit(self,parent=None):super(MyTable,self).init(parent)self.setItem(0,0,QTableWidgetItem(self.tr("性別cbw.addItem("Worker")39.myqq.setWindowTitle("My18-20行myqq.setWindowTitle("My18-20行在表格中插入一個(gè)QLabel控件,并設(shè)置QLabel的圖形屬性第21-22行設(shè)置表格單元的屬性為文本顯示第23-27行在表格中插入一個(gè)QDateTimeEdit控件,該控件可以編輯日期時(shí)setCalendarPopup()方法設(shè)置是否彈出日歷編輯器28-34行在表格中插入一個(gè)QComboBox控件QTableWidget35-37行在表格中插入一個(gè)QSpinBox控件8使用進(jìn)度PyQt42010-12-0622:441334評(píng)論(0)通常在處理長(zhǎng)時(shí)間任務(wù)時(shí)需要提供進(jìn)度條的顯示,告訴用戶當(dāng)前任務(wù)的進(jìn)展情況。本實(shí)例示如何使用進(jìn)度條,如下圖所示Qt提供了兩種顯示進(jìn)度條的方式,一種是QrgrssQt提供了兩種顯示進(jìn)度條的方式,一種是QrgrssrQrorssilg,QrrssrQrressilg成的進(jìn)度情況。標(biāo)準(zhǔn)的進(jìn)度條對(duì)話框包括一個(gè)進(jìn)度顯示條,一個(gè)取消按鈕以及一個(gè)標(biāo)簽Qrrssrmimmmimmrmt3%%,%,%m%%顯示完成的百分比,這是默認(rèn)顯示方式;%v顯示當(dāng)前的進(jìn)度值;%m顯示總的步進(jìn)值屬性可以讓進(jìn)度條以反方向顯示進(jìn)度Qrrssilg分別是miimmmimm和mimmrionmiimm和mimmmiimmDrinminimumDuration,則出現(xiàn)進(jìn)度條對(duì)話框;若小于設(shè)定的等待時(shí)間,則不出現(xiàn)進(jìn)度條對(duì)話框進(jìn)度條使用了一個(gè)步進(jìn)值的概念,即一時(shí)設(shè)置好進(jìn)度條的最大值和最小值,進(jìn)度條將會(huì)顯完成的步進(jìn)值占總的步進(jìn)值的百分比,百分比的計(jì)算公式為百分比=(value()-minimum())/(maximum()-本例具體實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.classdefinit(self,parent=None):super(Progess,self).init(parent)self.typeComboBox.addItem(self.tr("進(jìn)度對(duì)話框startPushButton=QPushButton(self.tr("開始defforiinelifself.typeComboBox.currentIndex()==1:progressDialog.setCancelButtonText(self.tr("取消foriinrange(num):if第38行獲得當(dāng)前需要復(fù)制的文件數(shù)目,這里對(duì)應(yīng)進(jìn)度條的總的步進(jìn)值第40-46行采用進(jìn)度條的方式顯示進(jìn)第40-46行采用進(jìn)度條的方式顯示進(jìn)41,42行設(shè)置進(jìn)度條的步進(jìn)范圍從0到需要復(fù)制的文件數(shù)目第45,46行模擬每一個(gè)文件的復(fù)制過(guò)程,這里通過(guò)QThread.msleep(100)來(lái)模擬,在實(shí)文件后,步進(jìn)值增加1第48-61行采用進(jìn)度對(duì)話框的方式顯示進(jìn)度49行創(chuàng)建一個(gè)進(jìn)度對(duì)話框第 行設(shè)置進(jìn)度對(duì)話框采用模態(tài)方式進(jìn)行顯示,即顯示進(jìn)度的同時(shí),其他窗口將不響應(yīng)入信號(hào)51行設(shè)置進(jìn)度對(duì)話框出現(xiàn)等待時(shí)間,此處設(shè)定為5秒,默4秒第52- 行設(shè)置進(jìn)度對(duì)話框的窗體標(biāo)題,顯示文字信息以及取消按鈕的顯示文字55行設(shè)置進(jìn)度對(duì)話框的步進(jìn)范圍第-1行模擬每一個(gè)文件復(fù)制過(guò)程,這里通過(guò)QTr.msl(0)rcssEs()序不會(huì)出現(xiàn)阻塞第 行檢測(cè)“取消”按鈕是否被觸發(fā),若觸發(fā)則退出循環(huán)并關(guān)閉進(jìn)度對(duì)話框,在實(shí)際用中,此處還需進(jìn)行相關(guān)的清理工作方式的使用比較簡(jiǎn)單方便,但必須使用processEvents來(lái)使事件循環(huán)保持正常進(jìn)行狀態(tài),從而確保應(yīng)用不會(huì)阻塞。若使用非模態(tài)方式,則需要通過(guò)QTime來(lái)實(shí)現(xiàn)定時(shí)設(shè)置進(jìn)度條的值9QtDesigner設(shè)計(jì)一個(gè)對(duì)話PyQt42010-12-0710:282079評(píng)論(1)在QtP在QtPhn源代碼來(lái)進(jìn)行QtQt序設(shè)計(jì)的程序員提供了sirQtsinrPonQtsinrQtDsir如下幾個(gè)步驟1)創(chuàng)建窗體并在窗體中放置各種控件2)對(duì)窗體進(jìn)行布局設(shè)計(jì)3)設(shè)置各控件的標(biāo)簽順序4)創(chuàng)建信5)連接信QtDesigner的啟動(dòng)可以通過(guò)命令行運(yùn)行designer完成Windows下的開始菜單完成啟動(dòng)后界面如下圖所示QtDesigner提供如QtDesigner提供如下5種表單模板可供選擇1)底部帶“確定”,“取消”按鈕的對(duì)話框窗2)右側(cè)帶“確定”,“取消”按鈕的對(duì)話框窗3)不帶按鈕的對(duì)話框窗體4)MainWindow類型窗5)通用窗體件,Qts件,Qtsier的設(shè)計(jì)空間列出了所有控件以及各控件的屬性設(shè)置窗體。在窗體中放置一個(gè)l和ieishtn和一個(gè)rialSpcret位置即可接下來(lái)對(duì)窗體的各個(gè)控件進(jìn)行布局設(shè)計(jì),選擇位于同一行的所有控件,選QtDesigner菜大小,以適合控件的大小,如下圖所示QtDesigner菜單中的“編輯編輯Tab順序順序,即焦點(diǎn)順序,如下圖所示,可以單擊藍(lán)色小框修改標(biāo)簽順序。完成標(biāo)簽順序設(shè)置后擇QtDesigner菜單中的“編輯”-->“編輯窗口部件”離開標(biāo)簽設(shè)置模式接下來(lái)進(jìn)行接下來(lái)進(jìn)行信號(hào)和槽的連接,選擇 菜單中的“編輯”-->“編輯信號(hào)/槽”,進(jìn)入信槽連接模式,如下圖所示。此時(shí)單擊OK的clicked()信號(hào)和的clicked()信號(hào)和右側(cè)的accept(),單擊“確定”按鈕,此時(shí)完成按鈕OK的信號(hào)/槽的連接用同樣的方式配置按鈕的信號(hào)/槽,如下圖所示至此QtDesigner的操作就結(jié)束了,生成一個(gè).ui文件,保9.ui然后使命令生成一個(gè)文件,如下圖所示接下來(lái)編寫一[python]view1.fromPyQt4.QtGuiimport*2.fromPyQt4.QtCoreimport*3.importsys[python]view1.fromPyQt4.QtGuiimport*2.fromPyQt4.QtCoreimport*3.importsys6.classdefinitsuper(TestDialog,self).init(parent)運(yùn)行后分別單擊OKCancel按鈕,執(zhí)行對(duì)話框accept()reject()函數(shù),如下圖所示使用QtsierQtsinr也有不利的地方:首先,使用QtDsierQtsir不利于掌握Qt編NT好地理解Qt編程的本質(zhì),更多地體驗(yàn)Qt編寫代碼的方式進(jìn)行實(shí)現(xiàn)的1010在程序PyQt42010-12-0716:561708評(píng)論(3)本實(shí)例使用一個(gè)簡(jiǎn)單的例子說(shuō)明如何在程序開發(fā)中使用Designer生成.ui文件。本實(shí)例利用QtDesigner3uiui插入到主程序的QTabWidget中,另一個(gè)ui由按鈕觸發(fā)彈出,如下圖所示。主程序窗口TestDialog采用的是手動(dòng)編寫代碼的實(shí)現(xiàn)方式利用Qt利用QtDesigner設(shè)計(jì)生成的.ui在使用時(shí)可利用Qt自帶pyuic4生成文件進(jìn)行使用下圖是本實(shí)例使用QtDesigner3ui然后然后使pyuic4對(duì)這三個(gè)ui文件進(jìn)行轉(zhuǎn)換,如下圖下面是本實(shí)例的代碼實(shí)現(xiàn)[python]下面是本實(shí)例的代碼實(shí)現(xiàn)[python]view1.fromPyQt4.QtGuiimport*2.fromPyQt4.QtCoreimport*4.importsys6.classdefinitsuper(TestDialog,self).initw1=QWidget()w1=QWidget()w2=QWidget()defslotChild(self):import這三個(gè)文件是通過(guò)pyuic4工具根據(jù)相應(yīng)的ui文件生成的slotChild()槽函數(shù)用于響應(yīng)彈出子窗口的按鈕事件主程序中聲明了3個(gè)變量,firstUi,secondUi,thirdUi分別對(duì)應(yīng)3ui14行首先創(chuàng)建一個(gè)QTabWidget15,16行創(chuàng)建第一個(gè)ui,首先新建一QWidget對(duì)象,以此QWidget對(duì)象為參數(shù)調(diào)第一ui的setupUi()函數(shù),生成第一個(gè)ui頁(yè)面17,18行以同樣的方式創(chuàng)建ui畫面20-22行在QTabWidget對(duì)象中插入兩個(gè)準(zhǔn)備好的ui頁(yè)面20-22行在QTabWidget對(duì)象中插入兩個(gè)準(zhǔn)備好的ui頁(yè)面24行連接第一ui頁(yè)面上childPushButton的clicked()slotChild()槽函數(shù)25行連接第二ui頁(yè)面上closePushButton的clicked()信號(hào)與reject()槽函數(shù),關(guān)閉窗口程序?qū)崿F(xiàn)彈出對(duì)話框的槽函數(shù)slotChild()中,首先新建一個(gè)QDialog對(duì)象,以此QDialog對(duì)象參數(shù)調(diào)用第三個(gè)ui對(duì)象的setupUi()函數(shù),最后調(diào)用exec()顯示此對(duì)話我在模擬wimdowsQMainWindowQMainWindow才明白用對(duì)話框可以彈出來(lái)。官網(wǎng)的class11動(dòng)態(tài)加PyQt42010-12-0809:051033評(píng)論(3)Qt提供了一個(gè)uic模塊,包ui相關(guān)的函數(shù)loadUi(),可使程序在運(yùn)行中動(dòng)態(tài)載Designer設(shè)計(jì)生成的.ui文件,本實(shí)例即利uic.loadUi()實(shí)現(xiàn)實(shí)例10中的彈出窗口部分實(shí)現(xiàn)動(dòng)態(tài)加載ui,首先需要在程序中導(dǎo)入uicfromPyQt4import然后修改slotChild()槽函數(shù)的實(shí)現(xiàn)代碼如下1a5906872011-01-0916:11[回復(fù)2a5906872011-01-0916:13[回復(fù)3a5906872011-01-0916:22[回復(fù)引用舉報(bào)[python]viewdef[python]viewdef第一uic的loadUi()函數(shù)根據(jù)ui文件生成一個(gè)相應(yīng)QDialog此對(duì)象返回調(diào)用dlg.exec_()顯示此子窗口這種動(dòng)態(tài)加載的方式不用生成ui_10_3.py文件,在程序運(yùn)行時(shí)才會(huì)被加載。采用這種方最大的好處是可以在不重新生成i_.py12基本布局管PyQt42010-12-0916:081252評(píng)論(1) 用戶資料修改頁(yè)面。實(shí)現(xiàn)效果圖如下圖所示提供的布局提供的布局類以及它們之間的繼承關(guān)系如下圖所示直排列布局和表格排列布局。Qt3中的QHBox和QVBox到Qt4以后被廢棄。布局中最常用的方法有addWidget()addLayout(),addWidget()方法用于在布局中插入控件,addLayout()用于在布局中插入下面通過(guò)實(shí)例的實(shí)現(xiàn)過(guò)程了解布局管理的使用方法。首先通過(guò)一個(gè)示意圖了解此對(duì)話框的局結(jié)構(gòu),如下圖所從上圖中可知,本實(shí)例共用到從上圖中可知,本實(shí)例共用到4個(gè)布局管理器,分LeftLayout,RightLayout,BottomLayout和MainLayout下面是具體的實(shí)現(xiàn)[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsysclassdefinitsuper(LayoutDialog,self).initlabel1=QLabel(self.tr("用戶名label6=QLabel(self.tr("頭像label7=QLabel(self.tr("個(gè)人說(shuō)明rightLayout.addW第13-26行定義對(duì)話框左側(cè)的控件。其中第19行設(shè)置控件的風(fēng)格,setFrameStyle()是QFrame第13-26行定義對(duì)話框左側(cè)的控件。其中第19行設(shè)置控件的風(fēng)格,setFrameStyle()是QFrame的方法,參數(shù)以或的方式設(shè)定控件的面板風(fēng)格,由形式(QFrame.Shape)和陰影(QFrame.Shadow)兩項(xiàng)配合設(shè)定。其中,形狀有NoFrame,Panel,Box,HLine,VLine WinPanel6種,陰影有Plain,Raised和Sunken3種,具體的效果讀者可自行搭配試驗(yàn)在定義代碼中,可以不必為各個(gè)控件指定父窗口,使用布局管理會(huì)自動(dòng)指定布局管理下的有控件的父窗口第28-44行定義控件布局,實(shí)現(xiàn)左部布局第28行定義一QGridLayout對(duì)象leftLayout,由于此布局管理器并不是主布局管理器因此不用指定父窗口,最后由主布局管理器統(tǒng)一指定QGridLayout類的addWidget()方法用來(lái)向布局中加入需布局的控件,第32-42行調(diào)用此法插入需布局的控件。addWidget()的函數(shù)原型如下addWidget(self,QWidget,int,int,Qt.Alignmentalignment=addWidget(self,QWidget,int,int,int,int,Qt.Alignmentalignment= 參數(shù)為需插入的控件對(duì)象,后面的兩個(gè) 參數(shù)為插入的行和列,再后面兩上參數(shù)為跨度的行數(shù)和跨度的列數(shù)參數(shù)描述各控件的對(duì)齊方式4142行設(shè)定兩列分別占用的空間的比例,此處設(shè)定兩列的空1:3。即使對(duì)框框架大小改變了,兩列之間的寬度比依然保持不變46-56行實(shí)現(xiàn)對(duì)話框右上側(cè)的頭像選擇區(qū)的布局,此處采用一QHBoxLayout類進(jìn)行布局管理。QHBoxLayout默認(rèn)采取自左向右的方式順序排列插入的控件,也可通過(guò)調(diào)用setDirection()方法設(shè)定排列的順序,例如第53行調(diào)用QLayout的setSpacing()方法設(shè)定各個(gè)控件之間的間第53行調(diào)用QLayout的setSpacing()方法設(shè)定各個(gè)控件之間的間距為2058-65行代碼實(shí)現(xiàn)對(duì)話框右側(cè)的布局。由一個(gè)QVBoxLayout實(shí)現(xiàn)布局,QVBoxLayout默于右側(cè)上部的頭像選擇區(qū)已使用布局,因此63行調(diào)用addLayout()方法在布局中插入子布局第67-72行代碼實(shí)現(xiàn)對(duì)話框下方兩個(gè)按鈕的布局,采用QHBoxLayout實(shí)現(xiàn)在整個(gè)對(duì)話框的大小發(fā)生改變時(shí),保證按鈕的大小不發(fā)生變化。合理使界面的布局效果增色不少addStretch()能最后實(shí)現(xiàn)主布局,用一個(gè)QGridLayout實(shí)現(xiàn),并在定義主布局時(shí)指定父窗口self,也可調(diào)self.setLayout(mainLayout)實(shí)現(xiàn)75行設(shè)定對(duì)話框的邊距為15第79行插入的子布局占用了用的函數(shù)方法和前面的是一樣的方法,只是參數(shù)不同,原型如下addLayout(self,QLayout,int,int,int,int,Qt.Alignmentalignment= 參數(shù)為需插入的控件對(duì)象,后面的兩個(gè) 參數(shù)為插入的行和列,再后面兩上參數(shù)為跨度的行數(shù)和跨度的列數(shù)參數(shù)描述各控件的對(duì)齊方式最后,第 行設(shè)定對(duì)話框的控件總是最優(yōu)化顯示,并且用戶無(wú)法改變對(duì)話框的大小,所最優(yōu)化顯示,即控件都按其sizeHint()的大小顯示Qt3的布局中,插入占用多行或多列的方法為addMultiCellWidget()和addMultiCellLayout(),在Qt4中廢棄了這兩種方而是統(tǒng)addWidget()addLayout()兩種方法501songchunyi2011-05-0311:28[回復(fù)引用舉報(bào)iconLabel.setMaximumSize(100100)iconLabel.setMaximumSize(100100)卻可以控制label困惑13多文PyQt42010-12-1318:011058評(píng)論(0)在使QMainW作為主窗口時(shí),經(jīng)常會(huì)用到多文檔的方式對(duì)文件進(jìn)行顯示,本實(shí)例過(guò)一個(gè)簡(jiǎn)單的例子分析如何實(shí)現(xiàn)多文檔的布局方式。實(shí)例效果圖如下Qt提供了一個(gè)WrsQt提供了一個(gè)Wrsce類,利用WrsceWrsce類繼承自Wigt類,因此只需在QiWiow主窗口中把QWrsceWrscecascade(),arrangeIcon(),title()等實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsysdefinit(self,parent=None):super(MainWidget,self).init(parent)self.workSpace=QWorkspace()edit1=QTextEdit(self.tr("子窗口1"))edit2=QTextEdit(self.tr("子窗口edit3=QTextEdit(self.tr("子窗口defcreateMenu(self):tile=QAction(self.tr("平鋪previousAct=QAction(self.tr("上一個(gè)ctivatePreviousWindow()"))defctivatePreviousWindow()"))defslotScroll()槽函數(shù)完成對(duì)多文檔空間QWorkspace的滑動(dòng)條進(jìn)行設(shè)置12行創(chuàng)建了一QWorkspace對(duì)象第13行設(shè)置主窗口的中央窗體為QWorkspace主窗口能實(shí)現(xiàn)多文檔的布局方式createMenu()函數(shù)創(chuàng)建主窗口的菜單第15-26行新建三個(gè)子窗口用于在主窗口中顯示第28-30行在workSpace中插入這些子窗口,即實(shí)現(xiàn)了多文檔的顯示37-39行實(shí)現(xiàn)對(duì)子窗arrangeIcons布局,它的布局方式是將所有子窗口以標(biāo)題欄的QWorkspace對(duì)象的arrangeIcons()方法相連注意此排列方式,僅對(duì)已經(jīng)最小化的子窗口起作用第41-43行第41-43行實(shí)現(xiàn)子窗口的tile布局,tile的意思是用子窗口把主窗口像鋪瓦片或貼瓷磚一排滿,如下圖所示,可直接連接QW對(duì)象的tile()函數(shù)實(shí)現(xiàn)第45-47行實(shí)現(xiàn)對(duì)子窗口的cascade布局,即子窗口的層疊顯示,如下圖所示,可直接接QWorkspace對(duì)象cascade()函數(shù)實(shí)現(xiàn)14分割窗14分割窗PyQt42010-12-1318:251138評(píng)論(0)分割窗口是應(yīng)用程序中經(jīng)常用到的,它可以靈活分布窗口的布局,經(jīng)常用于類似文件資源理器的窗口設(shè)計(jì)中。本實(shí)例實(shí)現(xiàn)一個(gè)分割窗口使用的例子,實(shí)現(xiàn)的效果圖如下 個(gè)窗口組成,各個(gè)窗口之間的大小可隨意拖動(dòng)改變。此實(shí)例使用類來(lái)實(shí)現(xiàn),實(shí)現(xiàn)代碼如下所示[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsysdefinit(self,parent=None):super(MainWidget,self).init(parent)mainSplitter.setWindowTitle(self.tr("分割窗口11-12行指定顯示的字第第14行定義一QSplitter類對(duì)象,為主分割窗口,設(shè)定此分割窗為水平分割竄第15行定義一QTextEdit類對(duì)象,并插入主分割窗口中第16行調(diào)用setAlignment()方法,設(shè)定TextEdit中文字的對(duì)齊方式,常用的有以下幾種Qt.AlignLeft:左對(duì)齊Qt.AlignRight:Qt.AlignLeft:左對(duì)齊Qt.AlignRight:右對(duì)齊Qt.AlignCenter:文字居中 為水平居中 為垂直居中)Qt.AlignUp:文字與頂端對(duì)Qt.AlignBottom:文字與底部對(duì)第 行定義一個(gè)右部的分割窗口,定義為垂直分割窗,并以主分割窗口為父窗口第8行調(diào)用的方法sOaeRsi(ole)時(shí)更新顯示,若設(shè)為Tre則實(shí)時(shí)更新顯示,若設(shè)為FlseTrQ3Q3中默認(rèn)為False第23行setStretchFactor()方法用于設(shè)定可伸縮控件,它的第一個(gè)參數(shù)指定設(shè)置的控件序號(hào),控控件。此實(shí)例中設(shè)定右部分割窗為可伸縮控件,當(dāng)整個(gè)對(duì)話框的寬度發(fā)生改變時(shí),左部的件編輯框?qū)挾缺3植蛔?,右部的分割窗寬度隨整個(gè)對(duì)話框大小的改變進(jìn)行調(diào)整對(duì)象的activateNextWindow()函數(shù)連接實(shí)現(xiàn)對(duì)象的activatePreviousWindow()函數(shù)連接實(shí)現(xiàn)子窗口的順序由QWorkspace的WindowOrder屬性決定,有以下兩種可能的順序QWorkspace.CreationOrder:子窗口創(chuàng)建的先后順序QWorkspace.StackingOrder:子窗口堆棧的順序,即處于最上方的子窗口是最后一個(gè)子口其中 是默認(rèn)的子窗口順序 作為參數(shù),回的子窗口列表即以指明的順序進(jìn)行排列64行通過(guò)QWorkspace的setScrollBarsEnabled()函數(shù)可對(duì)workSpace滑動(dòng)條的性進(jìn)行設(shè)置1515??看癙yQt42010-12-1409:391045評(píng)論(0)本實(shí)例實(shí)現(xiàn)停靠窗口的基本使用方法,實(shí)現(xiàn)的效果圖如下所 只可在主窗的左邊和右邊???,??看翱?只可在浮動(dòng)和在右???jī)煞N狀態(tài)間切換,并且不可移動(dòng)??看翱诳蓪?shí)現(xiàn)??看翱诘母鱾€(gè)狀態(tài)。具體??看翱诳蓪?shí)現(xiàn)停靠窗口的各個(gè)狀態(tài)。具體狀態(tài)此處不再一一用圖示的方式列出,讀可自行運(yùn)行代碼進(jìn)行試驗(yàn)具體實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsysdefinitsuper(MainWidget,self).init(parent)te=QTextEdit(self.tr("主窗口dock1=QDockWidget(self.tr("??看?"),self)dock1.setAllowedAreas(Qt.LeftDockWte1=QTextEdit(self.tr("窗口1,MainWindow的左部和右部??浚豢蒬ock1.setWdock2=QDockWidget(self.tr("??看翱趖e2=QTextEdit(self.tr("窗口2,只可浮動(dòng)dock2.setWidget(te2)te2=QTextEdit(self.tr("窗口2,只可浮動(dòng)dock2.setWidget(te2)dock3=QDockWidget(self.tr("??看翱?"),self)dock3.setFeatures(QDockWidget.AllDockWidgetFeatures)te3=QTextEdit(self.tr("窗口3,MainWindow任意位置???,可浮動(dòng),可關(guān)閉dock3.setWidget(te3)self.addDockWidget(Qt.BottomDockWidgetArea,dock3)行設(shè)置主窗口的標(biāo)題欄文字13-15行定義一QTextEdit對(duì)象作為主窗口,并把此編輯框設(shè)窗體的中18-23行設(shè)置126-30行設(shè)置233-37行設(shè)置3設(shè)置停靠窗口的一般流程為1)創(chuàng)建一個(gè) 對(duì)象的??看绑w2)設(shè)置此停靠窗體的屬性,通常調(diào)用setFeatures()setAllowedAreas()兩個(gè)方法3)新建一個(gè)要插入??看绑w的控件,本實(shí)例中為QTextEdit,也可為其他控件3)新建一個(gè)要插入停靠窗體的控件,本實(shí)例中為QTextEdit,也可為其他控件,常用的般為QListWidget和QTextEdit4)把控件插入停靠窗體,調(diào)用QDockW 的setWidget()方法5)使用addDockWidget()方法在MainWindow中加入此停靠窗本實(shí)例的個(gè)??看绑w都是按此流程實(shí)現(xiàn)的,此處需要重點(diǎn)介紹的是設(shè)置??看绑w狀態(tài)方法setAllowedAreas()和setFeatures()其中setAllowedAreas()方法設(shè)置??看绑w可??康膮^(qū)域,原型如下參數(shù)Qt.DockW指定了??看绑w可??康膮^(qū)域,包括以下Qt.LeftDockWidgetArea:可在主窗口的左側(cè)??縌t.RightDockWidgetArea:可在主窗口的右側(cè)??縌t.TopDockWidgetArea:可在主窗口的頂端???idgetArea:可在主窗口的底部??縌t.AllDockWidgetArea:可在主窗口任意(以上四個(gè))部位??縌t.NoDockWidgetArea:可??吭诓迦敫鲄^(qū)域設(shè)定可采用或(|)的方式進(jìn)行設(shè)定,如本實(shí)例中的第8行setFeatures()方法設(shè)置??看绑w的特性,原型如下setFeatures(self,參數(shù)QDockW 指定??看绑w的特性,包括以下幾種QDockWidget.DockWidgetClosable:??看翱申P(guān)閉,右上角的關(guān)閉按鈕QDockWidget.DockWidgetMovable:??看翱梢苿?dòng)QDockWidget.DockWidgetFloatable:??看翱筛?dòng)QDockWidget.AllDockWidgetFeature:此參數(shù)表示擁有??看暗乃鵔DockWidget.AllDockWidgetFeature:此參數(shù)表示擁有??看暗乃刑匦詉dgetFeature:不可移動(dòng),不可關(guān)閉,不可 行所示16堆棧窗PyQt42010-12-1415:151087評(píng)論(1)本實(shí)例實(shí)現(xiàn)一個(gè)堆棧窗體的使用,實(shí)現(xiàn)效果圖如下所示選擇左側(cè)列表框不同的選項(xiàng),右側(cè)則顯示所選的窗體實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.classdefinitsuper(StockDialog,self).init(parent)listWidget.insertItem(1,self.tr("listWidget.insertItem(2,self.tr("窗l(fā)abel2=QLabel(self.tr("這是窗l(fā)abel3=QLabel(self.tr("這是窗stack.addWidget(label1)stack.addW第13-16行創(chuàng)建一QListWidget控件第13-16行創(chuàng)建一QListWidget控件,并在控件中插入3個(gè)條目,作為選第17-193個(gè)QLabel標(biāo)簽控件,作為堆棧窗口顯示的三層窗體21行創(chuàng)建一個(gè)QStackedWidget堆棧窗第第22-24行調(diào)用addWidget()方法把前面創(chuàng)建的3個(gè)標(biāo)簽控件依次插入堆棧窗26-32行使用QHBoxLayout對(duì)整個(gè)對(duì)話框進(jìn)行布第的條目排序相一致本實(shí)例分析了堆棧窗的基本使用方法。在實(shí)際應(yīng)用中,堆棧窗口多與列表框及下拉列表框QComboBox配合使用17綜合布局實(shí)PyQt42010-12-1510:371338評(píng)論(0)本實(shí)例綜合應(yīng)用前面介紹的布局方法實(shí)現(xiàn)一個(gè)復(fù)雜的窗口布局,實(shí)現(xiàn)效果圖如下所其包括了基本布局,分割窗以及堆棧窗QSQSlir左側(cè)為一個(gè)QisWieQVoatQtcWi和3窗體的布局可用如下的示意圖表堆棧窗中的3個(gè)堆棧窗中的3個(gè)頁(yè)面分別定義了3個(gè)QWidget子類,包括“個(gè)人基本資料”頁(yè),由類實(shí)現(xiàn),“聯(lián)系方式”頁(yè),由Contact類實(shí)現(xiàn),“詳細(xì)信息”頁(yè),由Detail類實(shí)現(xiàn)“個(gè)人基本資料”頁(yè)與實(shí)例12中的內(nèi)容一樣,可直接引用“聯(lián)系方式”頁(yè)和“詳細(xì)信息”頁(yè)都是采用表格布局的方式進(jìn)行布局管理,用法與前面所介紹類似,此處不再重復(fù)進(jìn)行分析具體實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.class8.classdefinitsuper(StockDialog,self).init(parent)listWidget.insertItem(2,self.tr("詳細(xì)信息stack=QStackedWidget()stack.addWidget(detail)amendPushButton=QPushButton(self.tr("修改closePushButton=QPushButton(self.tr("關(guān)閉53.classdefinitsuper(BaseInfo,self).initlabel7=QLabel(self.tr("個(gè)人說(shuō)明rightLayout.addWidget(label7)classdefinit(self,parent=None):super(Contact,self).init(parent)label5=QLabel(self.tr("辦公電話receiveCheckBox=QCheckBox(self.tr("接收留言classdefinit(self,parent=None):super(Detail,self).init(parent)label4=QLabel(self.tr("個(gè)人說(shuō)明22-30行創(chuàng)建一QStackWidget對(duì)象2322-30行創(chuàng)建一QStackWidget對(duì)象23行調(diào)用setFrameStyle()方法對(duì)堆棧窗的示風(fēng)格進(jìn)行設(shè)置第28,29,30行在堆棧窗中順序插入“個(gè)人基本資料”,“聯(lián)系方式”,“詳細(xì)信息”3個(gè)頁(yè)面第32-38行創(chuàng)建兩個(gè)按鈕,并QHBoxLayout對(duì)其進(jìn)行布局40-44行采用QVBoxLayout生成主布局第13行創(chuàng)建一個(gè)水平分割窗,作為主布局框中依次插入相應(yīng)的條目第46行把列表框currentRowChanged()信號(hào)與堆棧窗的setCurrentIndex()槽相連接到按用戶選擇的條目顯示頁(yè)面的要求本實(shí)例綜合應(yīng)用了各種布局方式,完成一個(gè)較為復(fù)雜的界面顯示。包括了各種基本布局類應(yīng)用,堆棧窗的應(yīng)用和分割窗的應(yīng)用擇,使用最方便合理的布局方式。一般來(lái)說(shuō),QGridLayout功能較為強(qiáng)大,能完成 與QVBoxLayout 列,使用QHBoxLayout和QVBoxLayout更加方便,QGridLayout適合較為整齊方正的面布局18可擴(kuò)展對(duì)話PyQt42010-12-1609:58952評(píng)論(0)可擴(kuò)展對(duì)話框一般用于使用用戶有區(qū)分的場(chǎng)合。通常情況下,只出現(xiàn)基本的對(duì)話窗體,當(dāng)高級(jí)用戶使用,或需要更多信息時(shí),通過(guò)某種方式的切換顯示完整的對(duì)話窗體,切換的工通常由一個(gè)按鈕來(lái)實(shí)現(xiàn)。本實(shí)例即實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的填寫資料的例子,通常情況下,只需寫姓名和性別,在有特殊需要時(shí),還需填寫更多信息則切換至完整對(duì)話窗體。如下圖所示當(dāng)單擊“詳細(xì)”按鈕時(shí),對(duì)話框擴(kuò)當(dāng)單擊“詳細(xì)”按鈕時(shí),對(duì)話框擴(kuò)展,顯示其他更詳細(xì)的信息,再次單擊“詳細(xì)”按鈕,擴(kuò)展口又重新隱藏具體實(shí)現(xiàn)代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.classdefinitsuper(Extension,self).init(parent)nameLabel=QLabel(self.tr("姓名sexComboBox.addItem(self.tr("男sexComboBox.addItem(self.tr("女okButton=QPushButton(self.tr("確定detailButton=QPushButton(self.tr("詳細(xì)detailLayout.addWidget(ageLabel,0,0)detailLayout.addWidget(ageLineEdit,0,1)detailLayout.addWidget(departmentLabel,1,0)detailLayout.addWidget(emailLabel,2,0)detailLayout.addWidget(emailLineEdit,2,1)def第13-54行分別構(gòu)建兩部分窗體的內(nèi)57-63行對(duì)整個(gè)對(duì)話框進(jìn)行布局,其中,調(diào)設(shè)置窗體的大小固定,不能經(jīng)過(guò)拖動(dòng)改變大小,否則當(dāng)再次單擊“詳細(xì)”按鈕時(shí),對(duì)話框恢復(fù)到初始狀態(tài)slsi()dslsi()diluontiWigt窗體處于何種狀態(tài)。若此時(shí)是隱藏狀態(tài),則應(yīng)用s()detailWidget窗體,否則調(diào)用hide()隱藏detailWidget窗體通過(guò)本實(shí)例的分析,可了解擴(kuò)展對(duì)話框的基本實(shí)現(xiàn)方法,其中最關(guān)鍵的部分有以下兩點(diǎn)1)在整個(gè)對(duì)話框的構(gòu)造函數(shù)中調(diào)用這個(gè)設(shè)置保證了對(duì)話框的尺寸保持相對(duì)固定,始終是各控件組合的默認(rèn)尺寸,在擴(kuò)展部分示時(shí),對(duì)話框尺寸根據(jù)需顯示的控件進(jìn)行擴(kuò)展調(diào)整,而在擴(kuò)展部分隱藏時(shí),對(duì)話框尺寸又復(fù)至初始狀態(tài)2)切換按鈕的實(shí)現(xiàn)。整個(gè)窗體可擴(kuò)展的工作都是在此按鈕所連接的槽函數(shù)中完成19QPalette改變控件顏PyQt42010-12-2013:241123評(píng)論(2)在實(shí)際應(yīng)用中,常常會(huì)需要改變某個(gè)控件的顏色外觀,如背景,文字顏色等,Qt提供的色板類QPalette專門用于管理對(duì)話框的外觀顯示。本實(shí)例即通過(guò)一個(gè)具體的例子何利來(lái)改變窗體中控件的顏色。如下圖所示QPalette類相當(dāng)于對(duì)話框或是控件的調(diào)色板,它管理著控件或窗體的所有顏色信息,每個(gè)窗體或控件都包含一個(gè)QPalette對(duì)象,在顯示時(shí)按照它的QPalette類相當(dāng)于對(duì)話框或是控件的調(diào)色板,它管理著控件或窗體的所有顏色信息,每個(gè)窗體或控件都包含一個(gè)QPalette對(duì)象,在顯示時(shí)按照它的QPalette對(duì)象中對(duì)各部分各狀態(tài)要刷成什么顏色;當(dāng)要刷門時(shí),到計(jì)劃中去查一下門需要刷成什么顏色。采用這種方式可很方便地對(duì)窗體的各種顏色信息進(jìn)行管理QPalette類有兩個(gè)基本的概念個(gè)是ColorGroup,另一個(gè)是ColorRole,其中指的是3種不同的狀態(tài),包括以下幾QPalette.Active:獲得焦點(diǎn)的狀態(tài)QPalette.Inactive:未獲得焦點(diǎn)的QPalette.Disable:不可用狀通常一樣的顏色狀態(tài)與Inactive狀態(tài)下顏色顯示是一致的,當(dāng)然也可根據(jù)需要設(shè)置成ColorRole指的是顏色主題,即對(duì)窗體中不同的部位顏色的分類,如QPalette.Window是指用時(shí)可查閱Qt的在線幫助類使用最多,最重要的函數(shù)是setColor()函數(shù),其原型setColor(self,ColorRole,類同時(shí)還提供了setBrush()刷的設(shè)置來(lái)顯示進(jìn)行更改,這樣就有可使用圖片而不僅是單一的顏色來(lái)對(duì)主題進(jìn)行填充了之前版本中有關(guān)背景色設(shè)置的函數(shù)如setBackgroundColor()或是前景色設(shè)置的函數(shù)setForegroundColor()在Qt4中都被廢止QPalette類進(jìn)行管理如setBackgroundColor()函數(shù)可由以下語(yǔ)句代替如果并不是用單一的顏色填充背景,也可如果并不是用單一的顏色填充背景,也可將setColor()函數(shù)換進(jìn)行設(shè)置setBrush()函數(shù)對(duì)背景主注意要先調(diào)用setAutoFillBackground(True)設(shè)置窗體自動(dòng)填充背本實(shí)例的窗體分為兩個(gè)部分,一部分用于對(duì)不同主題顏色的選擇,另一部分用于顯示選擇顏色對(duì)于窗體外觀的改變具體實(shí)際代碼如下[python]view1.#-*-coding:utf-8-*-2.fromPyQt4.QtGuiimport*3.fromPyQt4.QtCoreimport*4.importsys8.classdefinitsuper(Extension,self).init(parent)defcreateCtrlFrame(self):gridLayout.addWidget(label2,1,0)gridLayout.addWgridLayout.addWgridLayout.addWidget(label4,3,0)gridLayout.ad

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論