ColorComboBox 基于QComboBox的颜色选择下拉框


效果

效果如上

代码示例

ColorComboBox::ColorComboBox(QWidget *parent)
	: QComboBox(parent)
{
    auto listView = static_cast<QListView*>(view());
    listView->setFlow(QListView::LeftToRight);
    listView->setViewMode(QListView::IconMode);
    listView->setSpacing(2);
    listView->setFixedWidth(240);

    for (int i = 0; i < rgbTblSize; ++i) {
        addColor(rgbTbl[i].value);
    }
}

void ColorComboBox::addColor(QColor color)
{
    int index = count();
    QPixmap pix(18, 18);
    pix.fill(color);
    addItem(pix, "", color);
    setItemData(index, QSize(20, 20), Qt::SizeHintRole);
    setItemData(index, color.name(), Qt::ToolTipRole);
}

QColor ColorComboBox::currentColor() const
{
	return currentData(ColorRole).value<QColor>();
}

void ColorComboBox::paintEvent(QPaintEvent* event)
{
    QStylePainter painter(this);
    painter.setPen(palette().color(QPalette::Text));

    // draw the combobox frame, focusrect and selected etc.
    QStyleOptionComboBox opt;
    initStyleOption(&opt);
    painter.drawComplexControl(QStyle::CC_ComboBox, opt);

    // draw color rect
    painter.setPen(Qt::gray);
    painter.setBrush(currentColor());
    painter.drawRect(opt.rect.adjusted(4, 4, -20, -5));
}

总结

1.利用 QListView 的 Flow 和 ViewMode 等定制,实现视图平铺。
2.重新实现 paintEvent 使文本区域变成 颜色块
3.源码下载:https://download.csdn.net/download/boy_fu/86500119

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要获取PyQt5中QComboBox所有下拉框的值,可以使用以下的方法: 1. 创建一个QComboBox对象,并将所需的下拉框选项添加到它中。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QComboBox class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 300, 200) comboBox = QComboBox(self) comboBox.addItem("Option 1") comboBox.addItem("Option 2") comboBox.addItem("Option 3") comboBox.activated[str].connect(self.onActivated) self.show() def onActivated(self, text): print(text) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 在上面的示例中,创建了一个QComboBox并将三个选项添加到其中。当选择其中一个选项时,会调用onActivated函数并传入选中的选项文本。在这个函数中,你可以打印所选选项的值或执行其他操作。 2. 使用currentIndex方法获得当前选中的索引,并通过itemText方法获取选项的文本: ```python selected_text = comboBox.itemText(comboBox.currentIndex()) print(selected_text) ``` 通过上述方法,你可以获取当前选中的下拉框选项的文本。 3. 要获取所有下拉框的值,可以使用count方法获取下拉框中选项的数量,并通过for循环遍历每个选项,然后通过itemText方法获取每个选项的文本: ```python for i in range(comboBox.count()): print(comboBox.itemText(i)) ``` 上述代码将打印每个下拉框选项的文本。你可以根据需求进行进一步的处理。 ### 回答2: 使用PyQt5中的QComboBox类可以很方便地获取所有下拉框的值。下面是一个简单的示例代码: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox class MainWindow(QMainWindow): def __init__(self): super().__init__() self.comboBox1 = QComboBox(self) self.comboBox1.addItem("选项1") self.comboBox1.addItem("选项2") self.comboBox1.addItem("选项3") self.comboBox2 = QComboBox(self) self.comboBox2.addItem("选项A") self.comboBox2.addItem("选项B") self.comboBox2.addItem("选项C") self.comboBox3 = QComboBox(self) self.comboBox3.addItem("选项X") self.comboBox3.addItem("选项Y") self.comboBox3.addItem("选项Z") self.setCentralWidget(self.comboBox1) self.getAllValues() def getAllValues(self): values = [] # 添加comboBox1的值 for i in range(self.comboBox1.count()): values.append(self.comboBox1.itemText(i)) # 添加comboBox2的值 for i in range(self.comboBox2.count()): values.append(self.comboBox2.itemText(i)) # 添加comboBox3的值 for i in range(self.comboBox3.count()): values.append(self.comboBox3.itemText(i)) print(values) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个例子中,我们创建了3个QComboBox下拉框,并添加了不同的选项。然后,通过调用getAllValues()方法,可以获取所有下拉框的值并打印出来。在该方法中,我们通过遍历每个下拉框的count()方法获取下拉框中选项的数量,然后通过itemText()方法获取每个选项的文本值,并将其添加到一个列表中。 以上代码可以运行并输出下拉框的值,对应本示例即["选项1", "选项2", "选项3", "选项A", "选项B", "选项C", "选项X", "选项Y", "选项Z"]。请根据自己的实际情况修改代码对应下拉框及选项的数量和内容。 ### 回答3: 要获取QComboBox中所有下拉框的值,可以使用PyQt5库中的`currentText()`和`count()`方法来实现。 1. 首先,创建一个QComboBox对象,并添加需要的下拉框值: ``` comboBox = QComboBox() comboBox.addItem("值1") comboBox.addItem("值2") comboBox.addItem("值3") ``` 2. 使用`count()`方法获取下拉框的总数: ``` count = comboBox.count() ``` 3. 使用循环和`currentText()`方法依次获取每个下拉框的值,并将它们存储在一个列表中: ``` values = [] for i in range(count): value = comboBox.itemText(i) values.append(value) ``` 4. 现在,`values`列表中包含了所有下拉框的值。 完整的代码如下: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox app = QApplication([]) window = QMainWindow() comboBox = QComboBox() comboBox.addItem("值1") comboBox.addItem("值2") comboBox.addItem("值3") count = comboBox.count() values = [] for i in range(count): value = comboBox.itemText(i) values.append(value) window.show() app.exec_() ``` 通过以上代码,你可以通过访问`values`列表获取到QComboBox中所有下拉框的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值