标签: qlistwidget

pyqt4中listWidget的返回值

每当我尝试使用 listWidget 存储所选值时

foo=self.listWidget.currentItem()
Run Code Online (Sandbox Code Playgroud)

这就是我得到的 foo 值:

<PyQt4.QtGui.QListWidgetItem object at 0x023BDD68>
Run Code Online (Sandbox Code Playgroud)

这有点道理,但显然不是我所要求的。我知道有多种方法可以选择实际的项目,但是是否没有像其他输入小部件一样的单行方法来执行此操作?

python qlistwidget pyqt4

3
推荐指数
1
解决办法
5088
查看次数

QListWidget 在拆分器更改大小时调整内容大小

我有一个 QListWidget 里面有一些小部件:

QListWidgetItem* w = new QListWidgetItem(ui->listWidget);
ui->listWidget->addItem(w);
w->setSizeHint(widget->sizeHint());
ui->listWidget->setItemWidget(w, widget);
Run Code Online (Sandbox Code Playgroud)

但是,一切似乎都正常,直到我调整了QListWidget( 它被嵌入到QDockwidget) 的大小。我是否必须遍历所有项目并手动调整它们的大小,还是有一个简单的技巧?

它只是一个列表,其中的项目在左侧有一个按钮,在右侧有一个按钮。如果列表被调整大小(QSize更改),则按钮将被隐藏并出现滚动条。我想根据列表宽度设置项目的大小。

qt qlistwidget sizehint

3
推荐指数
1
解决办法
4040
查看次数

QListWidget,为较长的文本插入换行符

我想用它QListWidget来显示我的内容。但有些内容相当长,我想让文本在第二行继续,而不是显示水平滚动条。

我使用 Qt Creator,但在设计视图中似乎找不到任何选项。

c++ qt qlistwidget qtgui

3
推荐指数
1
解决办法
5727
查看次数

如何列出 QListWidget 中的所有项目

如果已经有人问过,我很抱歉,但请您再次澄清一下:如何在 QListWidget 中列出所有 ListWidgetItems?

后期海报:

这是在行动。列表中有 5 个项目。4. 减一结果

from PyQt4 import QtGui, QtCore

class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(QtGui.QMainWindow,self).__init__()

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()
        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)

        self.lw = QtGui.QListWidget()
        myBoxLayout.addWidget(self.lw)

        for i in range(5):
            QtGui.QListWidgetItem('myItem', self.lw)

        ok_button = QtGui.QPushButton("Print count")
        ok_button.clicked.connect(self.OK)      
        myBoxLayout.addWidget(ok_button) 

    def OK(self):
        # let self.lw haven elements in it.
        items = []
        for x in range(self.lw.count()-1):
            items.append(self.lw.item(x))
        print len(items)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dialog_1 = Dialog_01()
    dialog_1.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

python qlistwidget pyqt4

3
推荐指数
2
解决办法
1万
查看次数

如何自定义 QListWidget 背景颜色(而不是 QListWidgetItem)

我想知道是否有办法自定义 QListWidget 背景颜色。

我努力了:

listWidget=QtGui.QListWidget()
listWidget.setAutoFillBackground(True)
p = listWidget.palette()
p.setColor(listWidget.backgroundRole(), QtGui.QColor("#424242"))
listWidget.setPalette(p)
Run Code Online (Sandbox Code Playgroud)

虽然没有错误,但它仍然无法工作。

python pyqt qlistwidget pyqt4 qlistwidgetitem

3
推荐指数
1
解决办法
5971
查看次数

如何在 PySide/PyQt 中撤销对 QListWidgetItem 的编辑?

精简版

您如何为QListWidgetItems在 PySide/PyQt 中所做的编辑实现撤消功能?

来自 Qt 教程的提示?

以下为 Qt 用户 (c++) 编写的教程可能有答案,但我不是 c++ 人,所以有点迷失:使用项目视图撤消/重做

更长的版本

我正在使用 aQListWidget来了解 PyQt 的撤消框架(借助有关该主题的文章)。当我自己实现一个命令(比如从列表中删除一个项目)时,我可以撤消/重做。

我还想让QListWidgetItems小部件中的 可编辑。这很简单:只需ItemIsEditable为每个项目添加标志即可。问题是,如何将此类编辑推送到撤消堆栈上,以便我可以撤消/重做它们?

下面是一个简单的工作示例,它显示了一个列表,可让您删除项目,以及撤消/重做此类删除。应用程序同时显示列表和撤消堆栈。需要做什么才能对该堆栈进行编辑?

简单的工作示例

from PySide import QtGui, QtCore

class TodoList(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.initUI()
        self.show()

    def initUI(self):
        self.todoList = self.makeTodoList()
        self.undoStack = QtGui.QUndoStack(self)
        undoView = QtGui.QUndoView(self.undoStack)
        buttonLayout = self.buttonSetup()
        mainLayout = QtGui.QHBoxLayout(self)
        mainLayout.addWidget(undoView)
        mainLayout.addWidget(self.todoList)
        mainLayout.addLayout(buttonLayout)
        self.setLayout(mainLayout)
        self.makeConnections()

    def buttonSetup(self):
        #Make buttons 
        self.deleteButton = QtGui.QPushButton("Delete") …
Run Code Online (Sandbox Code Playgroud)

python pyqt qlistwidget pyside

3
推荐指数
1
解决办法
3422
查看次数

向 QListWidget 添加或删除项目时发出信号

我根据应用程序中其他地方的用户选择动态地向 QListWidget 添加和删除项目。在 QListWidget 中添加或删除项目时是否会发出信号?我在文档中看到的信号没有提到添加或删除的任何内容。其余信号用于与单个项目交互时。

当一个项目添加到我的 QListWidget 时,我如何得到通知?

一个非常简单的例子:

from PyQt4.QtGui import *
import sys

app = QApplication(sys.argv)
listWidget = QListWidget()

for i in range(10):
    item = QListWidgetItem("Item %i" % i)
    listWidget.addItem(item)
    # ^^^ This is what I want a signal on

listWidget.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

我可以利用什么信号来捕获该addItem事件?

python signals pyqt qlistwidget

3
推荐指数
1
解决办法
2454
查看次数

如何更改(删除)QListWidget 的选择/活动颜色

在我的中QListWidget,有一些项目具有非默认背景颜色,我在自定义QListWidget类中将它们设置如下:

item->setBackgroundColor(qcolor); // item is of type QListWidgetItem*
Run Code Online (Sandbox Code Playgroud)

我设置的那些非默认颜色会被 的QListWidget选择颜色扭曲。看一个例子:

在此输入图像描述

项目threefour应该是相同的颜色,但由于four选择了该项目,因此它们不是相同的颜色,因此结果颜色是原始颜色和QListWidget的选择(活动项目?)颜色的总和。

我的问题是如何编辑或删除该选择颜色?

我在我的内部尝试过QListWidget(当我想更改项目的背景颜色时在特殊插槽中):

QPalette pal = this->palette();
pal.setColor(QPalette::Highlight, QColor(255,255,255,0));
this->setPalette(pal); // updated
Run Code Online (Sandbox Code Playgroud)

但并没有产生任何效果。我究竟做错了什么?设置的变量是否正确?QListWidget我是在其委托内部还是在其委托内部设置它?

更新:我尝试使用评论/答案所指出的样式表,但是,不可能将它们用于我的应用程序,因为我行中的项目有 3 种状态(所以我需要使用三种颜色)。例如,3 个状态对应于三种颜色:粉色表示活动,绿色表示不活动,灰色表示其余。使用样式表时,我无法将自定义属性(比方说QListWidget::item[Inactive="true"])设置为 single QListWidgetItem,但对于 full QListWidget,因此它将所有行设置为相同的颜色。

在这里尝试使用样式表来解决类似的问题,但没有成功,因此我得出结论,使用样式表不是正确的方法。

我最初使用的背景更改方法可以很好地满足我的目的,但我无法弄清楚如何摆脱默认选择颜色(透明浅蓝色),它会添加到背景颜色并产生混合颜色。

qt qlistwidget qt5 qpalette

3
推荐指数
1
解决办法
1万
查看次数

Pyqt 为 QlistWidget 中的部分文本着色

我想为 QListWidget 中的部分文本着色

在此处输入图片说明

我试图包含标签字体 int 文本,但这不起作用。

python pyqt qlistwidget

3
推荐指数
1
解决办法
4829
查看次数

QListWidgetItem 内的小部件在内部移动后消失

我有一个由via和拖放模式QListWidget填充的,当我在列表中移动项目时,其标签会消失。QLabel.setItemWidget()InternalMove

我该如何解决这个问题?

在此输入图像描述

一个最小的重现示例

from PyQt5.QtWidgets import (
    QApplication, QLabel, QStyle,
    QListWidget, QListWidgetItem
)
from PyQt5.QtCore import QSize
import sys


if __name__ == '__main__':
    app = QApplication(sys.argv)

    list = QListWidget()
    list.setFixedHeight(400)
    list.setDragDropMode(QListWidget.DragDropMode.InternalMove)

    for _ in range(8):
        item = QListWidgetItem()
        item.setSizeHint(QSize(40, 40))
        list.addItem(item)

        label = QLabel()
        label.setPixmap(list.style().standardIcon(
            QStyle.StandardPixmap.SP_ArrowUp).pixmap(QSize(40,40)))
        list.setItemWidget(item, label)

    list.show()

    sys.exit(app.exec())
Run Code Online (Sandbox Code Playgroud)

编辑

阅读其说明文档后.setItemWidget()

此函数只能用于在列表小部件项目的位置显示静态内容。如果您想显示自定义动态内容或实现自定义编辑器小部件,请改用 QListView 和 QStyledItemDelegate 子类。

我想知道这是否与该问题有关,在这种情况下“静态内容”意味着什么,被QLabel视为“动态内容”?

编辑#2

问题是在 a 内部dropEvent()dropMimeData()调用,这又创建了一个完整的新项目?(rowsInserted被调用),我猜这对于 self 项目不应该发生,因为拖动项目中设置的小部件没有序列化并存储在内部mimedata …

drag-and-drop qlistwidget python-3.x qt5 pyqt5

3
推荐指数
1
解决办法
600
查看次数