每当我尝试使用 listWidget 存储所选值时
foo=self.listWidget.currentItem()
Run Code Online (Sandbox Code Playgroud)
这就是我得到的 foo 值:
<PyQt4.QtGui.QListWidgetItem object at 0x023BDD68>
Run Code Online (Sandbox Code Playgroud)
这有点道理,但显然不是我所要求的。我知道有多种方法可以选择实际的项目,但是是否没有像其他输入小部件一样的单行方法来执行此操作?
我有一个 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
更改),则按钮将被隐藏并出现滚动条。我想根据列表宽度设置项目的大小。
我想用它QListWidget
来显示我的内容。但有些内容相当长,我想让文本在第二行继续,而不是显示水平滚动条。
我使用 Qt Creator,但在设计视图中似乎找不到任何选项。
如果已经有人问过,我很抱歉,但请您再次澄清一下:如何在 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) 我想知道是否有办法自定义 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)
虽然没有错误,但它仍然无法工作。
精简版
您如何为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) 我根据应用程序中其他地方的用户选择动态地向 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
事件?
在我的中QListWidget
,有一些项目具有非默认背景颜色,我在自定义QListWidget
类中将它们设置如下:
item->setBackgroundColor(qcolor); // item is of type QListWidgetItem*
Run Code Online (Sandbox Code Playgroud)
我设置的那些非默认颜色会被 的QListWidget
选择颜色扭曲。看一个例子:
项目three
和four
应该是相同的颜色,但由于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
,因此它将所有行设置为相同的颜色。
在这里尝试使用样式表来解决类似的问题,但没有成功,因此我得出结论,使用样式表不是正确的方法。
我最初使用的背景更改方法可以很好地满足我的目的,但我无法弄清楚如何摆脱默认选择颜色(透明浅蓝色),它会添加到背景颜色并产生混合颜色。
我有一个由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 …