PyQt5系列教程(44)::TIM模擬(QTreeWidget的使用)5
來自專欄 PyQt5圖形界面編程
好吧!今天是最後TIM模擬的最後一期。本期我們主要是實現聯繫人的搜索和新增聯繫人部分。其實這兩部分都是炒冷飯,相關知識點都是以前涉及到的。
聯繫人搜索
self.m_model = QStandardItemModel(0, 1, self)m_completer = QCompleter(self.m_model, self)self.lineEdit.setCompleter(m_completer)m_completer.activated[str].connect(self.onUsernameChoosed)def onUsernameChoosed(self, name): self.lineEdit.setText(name)@pyqtSlot(str)def on_lineEdit_textChanged(self, text): namelist = [] for itm in self.userslist: username = itm[username] if username.find(text) >= 0: namelist.append(itm[username]) self.m_model.removeRows(0, self.m_model.rowCount()) for i in range(0, len(namelist)): self.m_model.insertRow(0) self.m_model.setData(self.m_model.index(0, 0), namelist[i])
大致思路:
1、我們選擇了QStandardItemModel作為數據存儲模型,然後自動補全類QCompleter匹配這個模型,文本輸入欄匹配這個自動補全類對象。當自動補全對象被激活時,設置文本框的內容(聯繫人的姓名)。
2、當文本輸入欄內容變化的時候,我們去找輸入的內容是否可以在userslist中的username找到,要是能找到就臨時放到namelist這個列表中,然後我們往數據模型中不斷的增加內容就行了。
3、記得每次調用的時候需要先將數據模型的內容清空,否則你可以看看效果如何 ( ̄y▽ ̄)~*。
這塊詳細的介紹可以參考
學點編程吧:PyQt5系列教程(30): 文本輸入欄(QLineEdit)4新增聯繫人
新增聯繫人我們在之前的QQ模擬中已經涉及到了,唯一需要了解的應該就是如何將這個聯繫人和分組進行匹配了,效果如下圖:
對話框的UI代碼我們就不說了,大家自己下載源碼看吧。
@pyqtSlot()def on_bt_adduser_clicked(self): adduser = Dialog_additem() for g in self.grouplist: adduser.comboBox.addItem(g[groupname]) r = adduser.exec_() if r > 0: newitem = QTreeWidgetItem() newname = adduser.lineEdit.text() newicon = adduser.geticonpath() font = QFont() font.setPointSize(16) newitem.setFont(0, font) newitem.setText(0, newname) newitem.setTextAlignment(0, Qt.AlignHCenter|Qt.AlignVCenter) newitem.setIcon(0, QIcon(newicon)) comboxinfo = adduser.comboBox.currentText() cindex = self.searchgroup(comboxinfo) group = self.grouplist[cindex][group] self.grouplist[cindex][childcount] += 1 userdic = {user:newitem, username:newname,ishide:0} self.userslist.append(userdic) group.addChild(newitem) self.treeWidget.setCurrentItem(newitem)
上面就是我們獲取到對話框中的內容後如何將分組和聯繫人匹配的。
comboxinfo = adduser.comboBox.currentText()
這個就是我們操作下拉框後選擇具體的分組後獲得的內容。
cindex = self.searchgroup(comboxinfo)group = self.grouplist[cindex][group]self.grouplist[cindex][childcount] += 1userdic = {user:newitem, username:newname,ishide:0}self.userslist.append(userdic)group.addChild(newitem)
我們找到分組的內容後去反查分組對象,然後根據新增的聯繫人對象去增加,group.addChild(newitem)你懂得。
self.treeWidget.setCurrentItem(newitem)
觸發currentItemChanged()信號,讓分組的數量更新一下。
好了,TIM模擬的內容到此就更完了。建議還是下載源碼再看一下,有更好的歡迎交流。
最後
ok,今天的介紹就到這裡吧,下期我們把QComboBox的內容介紹下,因為TIM模擬涉及到這個知識點了,之前忘記講解了。如果你喜歡本篇文章,請給我點贊
讚賞(推薦)
分享給你的好友們吧!
關注微信公眾號:學點編程吧,發送pyqt544,可以獲得本期的代碼!加油!
(? ??_??)? (*?????)
推薦閱讀: