一泵肄、窗口控件
- 如果是主窗口,用QmainWindow類或油;
- 如果是對(duì)話框爱咬,就用Qdialog類;
- 如果不確定份汗,或者可能是頂層窗口盈电,也可能嵌入其他窗口,那就用Qwidget類杯活。
另外匆帚,注意QWidget、QMainWindow旁钧、QDialog和QFrame的區(qū)別吸重,特別是QWidget和QFrame的區(qū)別:
PyQt中所有的類都繼承于QObject類互拾。QWidget直接繼承于QPaintDevice類,QDialog嚎幸、QMainWindow颜矿、QFrame直接繼承QWidget 類。QWidget類是所有用戶界面對(duì)象的基類嫉晶。 QDialog類是對(duì)話框窗口的基類骑疆。QFrame類是有框架的窗口部件的基類,比如:QPushButton,QLabel… ---> QFrame ---> QWidget替废。本文中符號(hào)“---> ”表示“繼承于”的意思箍铭。
詳細(xì)區(qū)別請(qǐng)看:
QWidget、QMainWindow椎镣、QDialog和QFrame的區(qū)別
QFrame與QWidget的區(qū)別
QFrame類使用總結(jié)
(一) QmainWindow:主窗口類
通常用于創(chuàng)建主窗口诈火,它繼承自Qwidget類,擁有它的所派生方法和屬性衣陶。
(二) QWidget:控件類
它是所有用戶界面對(duì)象的基類柄瑰,所有的窗口和控件都直接或間接繼承自QWidget類。
1剪况、QLabel:標(biāo)簽類
- 可用于顯示不可編輯的文本和圖片教沾,也可以放置一個(gè)GIF動(dòng)畫,還可以用于提示標(biāo)記為其他控件译断。純文本授翻、鏈接、富文本可顯示的標(biāo)簽上孙咪。
- 繼承關(guān)系:
QLabel ---> QFrame ---> QWidget
2堪唐、文本框類控件:QLineEdit、QTextEdit
① QLineEdit : 單行文本框控件
用于輸入單行字符串翎蹈。
② QTextEdit : 多行文本框控件
可以顯示多行文本內(nèi)容淮菠,當(dāng)文本內(nèi)容超出控件顯示范圍時(shí),可以顯示水平個(gè)垂直滾動(dòng)條荤堪。還可顯示HTML文檔合陵。
3、 按鈕類控件 : QAbstractButton澄阳、QPushButton拥知、QRadioButton、QCheckBox
① QAbstractButton : 按鈕基類
是按鈕的基類碎赢,QPushButton低剔、QRadioButton、QCheckBox均繼承于 QAbstractButton,它是抽象類襟齿,不能實(shí)例化姻锁。
②QPushButton : 命令按鈕
是長(zhǎng)方形,通過單擊該按鈕或用快捷鍵來執(zhí)行一些命令蕊唐,該命令通常通過文本來描述執(zhí)行的動(dòng)作屋摔。
③ QRadioButton : 單選按鈕
- 提供一組可供選擇的按鈕和文本標(biāo)簽,用戶可選擇其中一選項(xiàng)替梨,標(biāo)簽用于顯示對(duì)應(yīng)的文本信息。它是一種形狀按鈕装黑,可以切換為on或off副瀑,即checked和unchecked。
- toggled信號(hào)是在切換單選鈕狀態(tài)時(shí)發(fā)射的恋谭,而clicked信號(hào)則在每次點(diǎn)擊時(shí)都會(huì)發(fā)射糠睡,所以toggled信號(hào)更適合用于狀態(tài)監(jiān)控,綁定這個(gè)信號(hào)疚颊,在按鈕狀態(tài)改變時(shí)狈孔,觸發(fā)相應(yīng)行為。
④ QCheckBox : 復(fù)選框按鈕
- 提供了一組帶文本標(biāo)簽的復(fù)選框材义,用戶怕樹葉子打破頭選擇多個(gè)選項(xiàng)均抽。
- 它被選中或取消選中,都會(huì)發(fā)射一個(gè)stateChaged信號(hào)其掂,如果想在它狀態(tài)改變時(shí)觸發(fā)相應(yīng)的行為油挥,請(qǐng)連接這個(gè)信號(hào)。
4款熬、QComboBox : 下拉列表框
是一個(gè)集按鈕和下拉選項(xiàng)于一體的控件深寥。
5、QSpinBox : 計(jì)數(shù)器
- 是一個(gè)計(jì)數(shù)器控件贤牛,允許用戶選擇一個(gè)整數(shù)值惋鹅,通過單擊向上/向下按鈕或按鍵盤上的上/下箭頭來增加/減少當(dāng)前顯示的值,也可以輸入值殉簸。
- 繼承關(guān)系:QSpinBox 闰集、QDoubleSpinBox ---> QAbstractSpinBox。QSpinBox用于數(shù)理整數(shù)值喂链,QDoubleSpinBox用于處理浮點(diǎn)值返十。
- 可用valueChanged信號(hào)連接槽,可通過value()函數(shù)獲得計(jì)數(shù)器的當(dāng)前值椭微。
6洞坑、QSlider : 滑動(dòng)條
- 提供一個(gè)垂直或水平的滑動(dòng)條,是用于控制有界值的典型控件蝇率,它允許用戶在某一范圍內(nèi)移動(dòng)滑塊迟杂,并將滑塊所在的位置置換成一個(gè)合法范圍內(nèi)的整數(shù)值刽沾。
7、窗口繪圖類控件:QPainter排拷、QPen侧漓、QBrush、QPixmap
① QPainter : 繪制點(diǎn)监氢、文字
- 在QWidget控件上執(zhí)行繪圖操作布蔗,可以繪制簡(jiǎn)單的直線到復(fù)雜的餅圖,執(zhí)行較低級(jí)別的圖形繪制功能浪腐。
② QPen : 鋼筆
- 用于繪制直線纵揍、曲線、或給輪廓畫出矩形议街、橢圓形泽谨、多邊形及其他形狀等
③ QBrush : 畫刷
- 用于填充如矩形、橢圓形或多邊形等形狀特漩。
④ QPixmap : 圖像顯示
- 用于繪圖設(shè)備的圖像顯示吧雹,它可以作為一個(gè)QPaintDevice對(duì)象,也可以加載到一個(gè)控件中涂身,通常是標(biāo)簽或按鈕雄卷,用于在標(biāo)簽或按鈕上顯示圖像。
8访得、拖曳與剪貼板:Drag龙亲、Drop、QClipboard
① DragEnterEvent悍抑、DropEvent : 拖曳
基于MIME類型的拖曳數(shù)據(jù)傳輸是基于QDrag類的鳄炉。QMimeData對(duì)象將關(guān)聯(lián)的數(shù)據(jù)與其對(duì)應(yīng)的MIME類型相關(guān)聯(lián)∷崖猓互聯(lián)網(wǎng)上的每一種資源都屬于一種MIME類型的數(shù)據(jù)拂盯。
② QClipboard : 剪貼板
- 提供了對(duì)系統(tǒng)剪貼板的訪問,可以在應(yīng)用程序之間復(fù)制和粘貼數(shù)據(jù)
9记靡、QCalendar :日歷控件
提供一個(gè)基于月份的視圖谈竿,通話用戶通過鼠標(biāo)或鍵盤選擇日期,默認(rèn)選中的是今天的日期摸吠。也可以對(duì)日歷的日期范圍進(jìn)行規(guī)定空凸。
10、QDateTimeEdit :日期時(shí)間控件
- 是一個(gè)允許用戶編輯日期時(shí)間的控件寸痢,可以使用鍵盤和上呀洲、下箭頭按鈕來增加或減少日期時(shí)間值。
- 繼承關(guān)系:QDateEdit、QTimeEdit ---> QDateTimeEdit ---> QAbstractSpinBox ---> QWidget
- 信號(hào)和槽函數(shù): QDateTimeEdit 常用的信號(hào)是dateChanger道逗、dateTimeChanged兵罢、timeChanged,分別在改變?nèi)掌谧仪稀⑷掌跁r(shí)間卖词、時(shí)間時(shí)發(fā)射。
11吏夯、菜單欄 :QMenuBar
12此蜈、工具欄 :QToolBar
13、狀態(tài)欄 :QStatusBar
MainWindow對(duì)象在底部保留有一個(gè)水平條噪生,作為狀態(tài)欄舶替,用于顯示永久或臨時(shí)的狀態(tài)信息。
(三) Qdialog:對(duì)話框窗口類
繼承關(guān)系:QMessageBox杠园、QFileDialog、QFontDialog舔庶、QInputDialog --->Qdialog
1抛蚁、QMessageBox : 消息彈出式對(duì)話框
- 用于顯示消息,允許用戶通過單擊不同的標(biāo)準(zhǔn)按鈕對(duì)消息進(jìn)行反饋惕橙。
2瞧甩、QInputDialog : 輸入對(duì)話框
- 由一個(gè)文本框和兩個(gè)按鈕(OK和Cancel)組成,當(dāng)用戶單擊ok按鈕后或按enter鍵后弥鹦,父窗口可以收集通過QInputDialog控件輸入的信息肚逸。
3、QFontDialog : 字體選擇對(duì)話框
- 可以讓用戶選擇所顯示文本的字號(hào)大小彬坏、樣式和格式朦促。
4、QFileDialog : 打開保存文件對(duì)話框
- 用于打開和保存文件的標(biāo)準(zhǔn)對(duì)話框栓始。
二务冕、布局控件
- PyQt5中有4種布局方式:水平布局、垂直布局幻赚、網(wǎng)格布局禀忆、表單布局
- PyQt5中有2種布局方法:addLayout()、addWidget()
(一)QBoxLayout :框布局
繼承關(guān)系:QHBoxLayout落恼、QVBoxLayout ---> QBoxLayout ---> QLayout ---> QObject
1箩退、QHBoxLayout :水平布局
按照從左到右的順序來添加控件
2、QVBoxLayout :垂直布局
按照從上到下的順序來添加控件
(二)QGridLayout :網(wǎng)格布局
- 將窗口分隔成行和列的網(wǎng)格來進(jìn)行排列佳谦。
(三)QFormLayout :表單布局
- 繼承關(guān)系: QFormLayout ---> QLayout ---> QObject
- 實(shí)現(xiàn)表單式的布局戴涝,由兩列組成,第一列用于顯示信息,給用戶提示喊括,一般叫l(wèi)abel域胧瓜;第二列需要用戶進(jìn)行選擇或輸入,一般叫field域郑什。 府喳。
(四)QSplitter
- 可以動(dòng)態(tài)地拖動(dòng)子控件之間的邊界來控制子控件的大小,是一個(gè)動(dòng)態(tài)布局管理器
三蘑拯、高級(jí)界面控件
(一)表格與樹:QTableView钝满、QListView、QListWidget申窘、QTableWidget弯蚜、QTreeView
1、QTableView
- 繼承關(guān)系:QTableWidget ---> QTableView ---> QAbstractItemView ---> QAbstractScrollArea ---> QFrame ---> QWidget
- QTableView控件可以綁定一個(gè)模型數(shù)據(jù)用來更新控件上的內(nèi)容
2剃法、QListView
- 繼承關(guān)系:QListWidget ---> QListView
- QListWidget 是 QListView的子類碎捺,是升級(jí)版本的QListView。
- QListView類用于展示數(shù)據(jù)
3贷洲、QListWidget
- 是一個(gè)基于條目的接口收厨,用于從列表中添加或刪除條目。每一個(gè)條目對(duì)象都是QListWidgetItem對(duì)象优构。
4诵叁、QTableWidget
- 是Qt程序中常用的顯示數(shù)據(jù)表格的空間
- 繼承關(guān)系:QTableWidget ---> QTableView
5、QTreeView
- 繼承關(guān)系:QTreeWidget ---> QTreeView ---> QAbstractItemView ---> QAbstractScrollArea ---> QFrame ---> QWidget
- QTreeView類實(shí)現(xiàn)樹形結(jié)構(gòu)钦椭,樹形結(jié)構(gòu)是通過QTreeWidgetQ和TreeWidgetItem類實(shí)現(xiàn)的拧额,其中TreeWidgetItem類實(shí)現(xiàn)樹形節(jié)點(diǎn)的添加。
(二)容器:裝載更多的控件
- 用于解決一個(gè)窗口裝載不下或裝載太多控件而不美觀的問題彪腔。
1侥锦、QTabWidget:選項(xiàng)卡控件
- 提供一個(gè)選項(xiàng)卡和一個(gè)頁面區(qū)域,默認(rèn)顯示第一個(gè)選項(xiàng)卡
2漫仆、QStackedWidget:堆棧窗口控件
- 是一個(gè)堆棧窗口控件捎拯,可以填充一些小控件,但同一時(shí)間只有一個(gè)小控件可以顯示盲厌。QStackedWidget使用使用QStackedLayout布局署照。
3、QDockWidget
- 是一個(gè)可以吐鸷疲靠在QMainWindow內(nèi)的窗口控件建芙,它可以保持浮動(dòng)狀態(tài)或者在指定位置作為子窗口附加到主窗口中。
4懂扼、多文檔界面:QMdiArea
- QMdiArea控件占據(jù)在主窗口的中央位置禁荸,子窗口在這個(gè)區(qū)域是QMdiSubWindow類的實(shí)例右蒲。
5、QScrollBar
- 提供水平或垂直的滾動(dòng)條赶熟,這樣可以擴(kuò)大當(dāng)前窗口的有效裝載面積瑰妄,從而裝載更多的控件。
(三)多線程
1映砖、QTimer:定時(shí)器
- 提供重復(fù)的和音效的定時(shí)器间坐。
- 一般將timeout信號(hào)連接到相應(yīng)的槽。
1邑退、QThread
- 是Qt線程類中最核心的底層類竹宋,要使用QThread開始一個(gè)線程,可以創(chuàng)建它的一個(gè)子類地技,然后覆蓋其QThread.run()函數(shù)蜈七。
- PyQt的線程使用方法:建立一個(gè)自定義的類,使它繼承QThread莫矗,并實(shí)現(xiàn)其run()方法即可飒硅。
- QThread有started和finished信號(hào),可以為這2個(gè)信號(hào)指定槽函數(shù)作谚。