PyQt5下拉式復(fù)選框QComboCheckBox的實(shí)例
筆者在用PyQt5寫(xiě)GUI時(shí)碰到了需要使用下拉式復(fù)選框的情況,但是PyQt5中沒(méi)有相應(yīng)的組件,而網(wǎng)上找到的方法大多是qt使用的,所以不能直接拿來(lái)用。
沒(méi)辦法,在這種讓人無(wú)奈的情況下,筆者只能根據(jù)網(wǎng)上大神們的方法試著自己寫(xiě)一個(gè)嘍。
你還別說(shuō),真就讓我寫(xiě)出來(lái)了。(筆者是個(gè)菜鳥(niǎo)新手,所以這小小的成功讓我很開(kāi)心)
然后筆者就很?chē)?yán)肅地將這個(gè)組件命名為QComboCheckBox,也就是QComboBox和QCheckBox的拼接。
廢話不多說(shuō),直接先上效果圖:
然后是代碼:(第一個(gè)是基礎(chǔ),第二個(gè)是帶全選和清空功能)
from PyQt5.QtWidgets import QComboBox,QLineEdit,QListWidget,QCheckBox,QListWidgetItem class ComboCheckBox(QComboBox): def __init__(self,items):#items==[str,str...] super(ComboCheckBox,self).__init__() self.items=items self.qCheckBox=[] self.qLineEdit=QLineEdit() self.qLineEdit.setReadOnly(True) qListWidget=QListWidget() self.row_num=len(self.items) for i in range(self.row_num): self.qCheckBox.append(QCheckBox()) qItem=QListWidgetItem(qListWidget) self.qCheckBox[i].setText(self.items[i]) qListWidget.setItemWidget(qItem,self.qCheckBox[i]) self.qCheckBox[i].stateChanged.connect(self.show) self.setLineEdit(self.qLineEdit) self.setModel(qListWidget.model()) self.setView(qListWidget) def Selectlist(self): Outputlist=[] for i in range(self.row_num): if self.qCheckBox[i].isChecked()==True: Outputlist.append(self.qCheckBox[i].text()) return Outputlist def show(self): show='' self.qLineEdit.setReadOnly(False) self.qLineEdit.clear() for i in self.Selectlist(): show+=i+';' self.qLineEdit.setText(show) self.qLineEdit.setReadOnly(True) from PyQt5.QtWidgets import QComboBox,QLineEdit,QListWidget,QCheckBox,QListWidgetItem class ComboCheckBox(QComboBox): def __init__(self,items):#items==[str,str...] super(ComboCheckBox,self).__init__() self.items=items self.items.insert(0,'全部') self.row_num=len(self.items) self.Selectedrow_num=0 self.qCheckBox=[] self.qLineEdit=QLineEdit() self.qLineEdit.setReadOnly(True) self.qListWidget=QListWidget() self.addQCheckBox(0) self.qCheckBox[0].stateChanged.connect(self.All) for i in range(1,self.row_num): self.addQCheckBox(i) self.qCheckBox[i].stateChanged.connect(self.show) self.setModel(self.qListWidget.model()) self.setView(self.qListWidget) self.setLineEdit(self.qLineEdit) def addQCheckBox(self,i): self.qCheckBox.append(QCheckBox()) qItem=QListWidgetItem(self.qListWidget) self.qCheckBox[i].setText(self.items[i]) self.qListWidget.setItemWidget(qItem,self.qCheckBox[i]) def Selectlist(self): Outputlist=[] for i in range(1,self.row_num): if self.qCheckBox[i].isChecked()==True: Outputlist.append(self.qCheckBox[i].text()) self.Selectedrow_num=len(Outputlist) return Outputlist def show(self): show='' Outputlist=self.Selectlist() self.qLineEdit.setReadOnly(False) self.qLineEdit.clear() for i in Outputlist: show+=i+';' if self.Selectedrow_num==0: self.qCheckBox[0].setCheckState(0) elif self.Selectedrow_num==self.row_num-1: self.qCheckBox[0].setCheckState(2) else: self.qCheckBox[0].setCheckState(1) self.qLineEdit.setText(show) self.qLineEdit.setReadOnly(True) def All(self,zhuangtai): if zhuangtai==2: for i in range(1,self.row_num): self.qCheckBox[i].setChecked(True) elif zhuangtai==1: if self.Selectedrow_num==0: self.qCheckBox[0].setCheckState(2) elif zhuangtai==0: self.clear() def clear(self): for i in range(self.row_num): self.qCheckBox[i].setChecked(False)
使用方法:
a=ComboCheckBox('子項(xiàng)列表')
Selectlist()獲取被選子項(xiàng)列表
All()全選
clear()清空已選項(xiàng)
以上這篇PyQt5下拉式復(fù)選框QComboCheckBox的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python飛機(jī)大戰(zhàn) pygame游戲創(chuàng)建快速入門(mén)詳解
這篇文章主要介紹了python飛機(jī)大戰(zhàn) pygame游戲創(chuàng)建,結(jié)合實(shí)例形式詳細(xì)分析了Python使用pygame創(chuàng)建飛機(jī)大戰(zhàn)游戲的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12Python Transformer 庫(kù)安裝配置及使用方法
Hugging Face Transformers 是自然語(yǔ)言處理(NLP)領(lǐng)域最流行的開(kāi)源庫(kù)之一,支持基于 Transformer 架構(gòu)的預(yù)訓(xùn)練模型(如 BERT、GPT、T5 等),覆蓋文本、圖像、音頻等多模態(tài)任務(wù),本文介紹Python 中的 Transformer 庫(kù)及使用方法,感興趣的朋友一起看看吧2025-04-04linux下安裝python3和對(duì)應(yīng)的pip環(huán)境教程詳解
這篇文章主要介紹了linux下安裝python3和對(duì)應(yīng)的pip環(huán)境,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07使用python根據(jù)端口號(hào)關(guān)閉進(jìn)程的方法
今天小編就為大家分享一篇使用python根據(jù)端口號(hào)關(guān)閉進(jìn)程的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11python登錄WeChat 實(shí)現(xiàn)自動(dòng)回復(fù)實(shí)例詳解
在本篇內(nèi)容里小編給大家整理的是關(guān)于python登錄WeChat 實(shí)現(xiàn)自動(dòng)回復(fù)的相關(guān)實(shí)例內(nèi)容以及知識(shí)點(diǎn)總結(jié),有興趣的朋友們參考下。2019-05-05Django后端接收嵌套Json數(shù)據(jù)及解析詳解
這篇文章主要介紹了Django后端接收嵌套Json數(shù)據(jù)及解析詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python實(shí)現(xiàn)QQ郵箱發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)QQ郵箱發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03一波神奇的Python語(yǔ)句、函數(shù)與方法的使用技巧總結(jié)
這篇文章主要介紹了一波神奇的Python函數(shù)與方法的使用技巧總結(jié),包括裝飾器和with語(yǔ)句等的不常見(jiàn)用法,需要的朋友可以參考下2015-12-12