最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

自定義實現(xiàn) PyQt5 下拉復(fù)選框 ComboCheckBox的完整代碼

 更新時間:2020年03月30日 10:58:44   作者:TM0831  
這篇文章主要介紹了自定義實現(xiàn) PyQt5 下拉復(fù)選框 ComboCheckBox的完整代碼,本文通過實例代碼講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

自定義實現(xiàn) PyQt5 下拉復(fù)選框 ComboCheckBox

一、前言

由于最近的項目需要具有復(fù)選功能,但過多的復(fù)選框會影響界面布局和美觀,因而想到把 PyQt5 的下拉列表和復(fù)選框結(jié)合起來,但在 PyQt5 中并沒有這樣的組件供我們使用,所以想要自己實現(xiàn)一個下拉復(fù)選框,主要就是繼承 QComboBox 類,然后將復(fù)選框 QCheckBox 加入其中,并實現(xiàn)相應(yīng)的功能。

最終實現(xiàn)的下拉復(fù)選框效果如下:

二、代碼實現(xiàn)

1.主要方法

在 PyQt5 中,有幾個主要的方法需要了解一下,方法名稱和對應(yīng)的含義如下:

QtWidgets.QComboBox.setView( itemView ) :設(shè)置 組合框彈出窗口中使用的視圖 , 組合框獲取視圖的所有權(quán)。
QtWidgets.QcomboBox.setLineEdit( QLineEdit ) : 設(shè)置組合框 使用 的行 ,而不是當(dāng)前行編輯窗口小部件。
QtWidgets.QListWidget.setItemWidget(item, widget) : 設(shè)置 要在給定的 item 中的 widget 組件 。

2.具體代碼

實現(xiàn)下拉復(fù)選框的思路為用 setView() 方法將 QComboBox 下拉列表的視圖改為 QListWidget 組件,然后將 QCheckBox 復(fù)選框用在 QListWiget 中,具體代碼如下:

class ComboCheckBox(QComboBox):
  def __init__(self, items: list):
    """
    initial function
    :param items: the items of the list
    """
    super(ComboCheckBox, self).__init__()
    self.items = items # items list
    self.box_list = [] # selected items
    self.text = QLineEdit() # use to selected items
    self.text.setReadOnly(True)
    q = QListWidget()
    for i in range(len(self.items)):
      self.box_list.append(QCheckBox())
      self.box_list[i].setText(self.items[i])
      item = QListWidgetItem(q)
      q.setItemWidget(item, self.box_list[i])
      self.box_list[i].stateChanged.connect(self.show_selected)
    self.setLineEdit(self.text)
    self.setModel(q.model())
    self.setView(q)
  def get_selected(self) -> list:
    """
    get selected items
    :return:
    """
    ret = []
    for i in range(len(self.items)):
      if self.box_list[i].isChecked():
        ret.append(self.box_list[i].text())
    return ret
  def show_selected(self):
    """
    show selected items
    :return:
    """
    self.text.clear()
    ret = '; '.join(self.get_selected())
    self.text.setText(ret)

其中 show_selected() 用于顯示被選中的內(nèi)容,get_selected() 則用于獲取所有被選中的內(nèi)容并返回。

3.增加全選

要增加全選功能,首先是要在最前面加一個全選的選擇框,然后為這個全選的選擇框綁定相應(yīng)的方法,用于實現(xiàn)全選功能和取消全選功能,具體代碼如下:

def all_selected(self):
  """
  decide whether to check all
  :return:
  """
  # change state
  if self.state == 0:
    self.state = 1
    for i in range(1, len(self.items)):
      self.box_list[i].setChecked(True)
  else:
    self.state = 0
    for i in range(1, len(self.items)):
      self.box_list[i].setChecked(False)
  self.show_selected()

4.修改樣式

由于默認(rèn)的樣式并不美觀,所以我們可以對控件的樣式進(jìn)行自定義,例如字體大小、字體粗細(xì)等等,例如:

q.setStyleSheet("font-size: 20px; font-weight: bold; height: 40px; margin-left: 5px") self.setStyleSheet("width: 300px; height: 50px; font-size: 21px; font-weight: bold")

三、完整程序

完善后的下拉復(fù)選框的運行程序代碼如下:

from PyQt5.QtWidgets import QComboBox, QLineEdit, QListWidgetItem, QListWidget, QCheckBox, \
  QApplication, QVBoxLayout, QWidget
import sys
class ComboCheckBox(QComboBox):
  def __init__(self, items: list):
    """
    initial function
    :param items: the items of the list
    """
    super(ComboCheckBox, self).__init__()
    self.items = ["全選"] + items # items list
    self.box_list = [] # selected items
    self.text = QLineEdit() # use to selected items
    self.state = 0 # use to record state
    q = QListWidget()
    for i in range(len(self.items)):
      self.box_list.append(QCheckBox())
      self.box_list[i].setText(self.items[i])
      item = QListWidgetItem(q)
      q.setItemWidget(item, self.box_list[i])
      if i == 0:
        self.box_list[i].stateChanged.connect(self.all_selected)
      else:
        self.box_list[i].stateChanged.connect(self.show_selected)
    q.setStyleSheet("font-size: 20px; font-weight: bold; height: 40px; margin-left: 5px")
    self.setStyleSheet("width: 300px; height: 50px; font-size: 21px; font-weight: bold")
    self.text.setReadOnly(True)
    self.setLineEdit(self.text)
    self.setModel(q.model())
    self.setView(q)
  def all_selected(self):
    """
    decide whether to check all
    :return:
    """
    # change state
    if self.state == 0:
      self.state = 1
      for i in range(1, len(self.items)):
        self.box_list[i].setChecked(True)
    else:
      self.state = 0
      for i in range(1, len(self.items)):
        self.box_list[i].setChecked(False)
    self.show_selected()
  def get_selected(self) -> list:
    """
    get selected items
    :return:
    """
    ret = []
    for i in range(1, len(self.items)):
      if self.box_list[i].isChecked():
        ret.append(self.box_list[i].text())
    return ret
  def show_selected(self):
    """
    show selected items
    :return:
    """
    self.text.clear()
    ret = '; '.join(self.get_selected())
    self.text.setText(ret)
class UiMainWindow(QWidget):
  def __init__(self):
    super(UiMainWindow, self).__init__()
    self.setWindowTitle('Test')
    self.resize(600, 400)
    combo = ComboCheckBox(["Python", "Java", "Go", "C++", "JavaScript", "PHP"])
    layout = QVBoxLayout()
    layout.addWidget(combo)
    self.setLayout(layout)
if __name__ == "__main__":
  app = QApplication(sys.argv)
  ui = UiMainWindow()
  ui.show()
  sys.exit(app.exec_())

總結(jié)

到此這篇關(guān)于自定義實現(xiàn) PyQt5 下拉復(fù)選框 ComboCheckBox的完整代碼的文章就介紹到這了,更多相關(guān)PyQt5 下拉復(fù)選框 ComboCheckBox內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python初學(xué)者,用python實現(xiàn)基本的學(xué)生管理系統(tǒng)(python3)代碼實例

    python初學(xué)者,用python實現(xiàn)基本的學(xué)生管理系統(tǒng)(python3)代碼實例

    這篇文章主要介紹了用python實現(xiàn)學(xué)生管理系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python字典的常用操作方法小結(jié)

    python字典的常用操作方法小結(jié)

    下面小編就為大家?guī)硪黄猵ython字典的常用操作方法小結(jié)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-05-05
  • python使用多線程查詢數(shù)據(jù)庫的實現(xiàn)示例

    python使用多線程查詢數(shù)據(jù)庫的實現(xiàn)示例

    這篇文章主要介紹了python使用多線程查詢數(shù)據(jù)庫的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python多線程并發(fā)及測試框架案例

    python多線程并發(fā)及測試框架案例

    這篇文章主要介紹了python多線程并發(fā)及測試框架案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Python利用GDAL模塊實現(xiàn)讀取柵格數(shù)據(jù)并對指定數(shù)據(jù)加以篩選掩膜

    Python利用GDAL模塊實現(xiàn)讀取柵格數(shù)據(jù)并對指定數(shù)據(jù)加以篩選掩膜

    這篇文章主要為大家詳細(xì)介紹了如何基于Python語言中g(shù)dal模塊,對遙感影像數(shù)據(jù)進(jìn)行柵格讀取與計算,同時基于QA波段對像元加以篩選、掩膜的操作,需要的可以參考一下
    2023-02-02
  • 零基礎(chǔ)寫python爬蟲之抓取百度貼吧代碼分享

    零基礎(chǔ)寫python爬蟲之抓取百度貼吧代碼分享

    前面幾篇都是以介紹基礎(chǔ)知識為主,各位童鞋估計都在犯嘀咕了,你到底寫不寫爬蟲????額,好吧,本文就給大家寫一個簡單的百度貼吧的python爬蟲代碼。
    2014-11-11
  • Pandas時間序列重采樣(resample)方法中closed、label的作用詳解

    Pandas時間序列重采樣(resample)方法中closed、label的作用詳解

    這篇文章主要介紹了Pandas時間序列重采樣(resample)方法中closed、label的作用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python對列表進(jìn)行排序的五種方法舉例

    Python對列表進(jìn)行排序的五種方法舉例

    這篇文章主要介紹了Python對列表進(jìn)行排序的五種方法,文中包括sort()方法、sorted()函數(shù)、lambda表達(dá)式、operator模塊和numpy模塊,幫助開發(fā)者根據(jù)具體需求選擇合適的排序方式,需要的朋友可以參考下
    2024-11-11
  • Python中的a=value1 or value2詳解

    Python中的a=value1 or value2詳解

    Python中的`a=valueor0`是一種簡潔的方式來為變量提供默認(rèn)值,利用了Python的布爾上下文和短路求值機制,如果`value`是“真值”,則`a`被賦值為`value`;如果`value`是“假值”,則`a`被賦值為0
    2024-12-12
  • pycharm安裝教程(下載安裝以及設(shè)置中文界面)

    pycharm安裝教程(下載安裝以及設(shè)置中文界面)

    這篇文章主要給大家介紹了關(guān)于pycharm安裝教程,文中包括下載安裝以及設(shè)置中文界面,PyCharm是一款Python IDE,其帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,需要的朋友可以參考下
    2023-10-10

最新評論

临江市| 库尔勒市| 定襄县| 湖北省| 堆龙德庆县| 临朐县| 寻乌县| 邢台县| 承德市| 石景山区| 武安市| 北川| 松潘县| 宁都县| 凉山| 钦州市| 侯马市| 阜康市| 常熟市| 贵阳市| 兴仁县| 垣曲县| 焦作市| 黔西县| 容城县| 鄂托克前旗| 上林县| 保康县| 增城市| 金平| 平果县| 定日县| 梁河县| 洛扎县| 冕宁县| 洱源县| 雷州市| 金溪县| 保靖县| 麻栗坡县| 仪陇县|