- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当 qlistview 项目的复选框被更改时,我如何发出信号?理想情况下,发出的信号会有某种指向发生变化的项目的指针,这样我就可以在 PySide 中采取相应的行动。
import os
import sys
import json
from PySide import QtGui, QtCore
class MegaMergeWindow(QtGui.QMainWindow):
def __init__(self, *args, **kwargs):
super(MegaMergeWindow, self).__init__(*args, **kwargs)
self.TITLE = 'Mega Merge'
self.VERSION = '1.0.0'
self.setWindowTitle(self.TITLE + ' | ' + self.VERSION)
self.resize(350,500)
# vars
self.user_folder = os.path.join(os.getenv('LOCALAPPDATA'), 'MegaMerge')
# controls
self.ui_files = QtGui.QListView()
self.ui_files.setModel(QtGui.QStandardItemModel())
self.ui_files.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.ui_merge = QtGui.QPushButton('Merge')
main_layout = QtGui.QVBoxLayout()
main_layout.addWidget(self.ui_files)
main_layout.addWidget(self.ui_merge)
main_widget = QtGui.QWidget()
main_widget.setLayout(main_layout)
self.setCentralWidget(main_widget)
# signals
self.ui_merge.clicked.connect(self.merge_clicked)
self.populate_files()
def populate_files(self, files=[], clear=False):
model = self.ui_files.model()
if clear:
model.clear()
files = ['Doug','Kevin','Amy','Melissa','John']
for f in files:
name = os.path.basename(f)
item = QtGui.QStandardItem(name)
item.setData(f, role=QtCore.Qt.UserRole)
item.setCheckable(True)
item.setCheckState(QtCore.Qt.Checked)
model.appendRow(item)
model.sort(0, QtCore.Qt.AscendingOrder)
def collect_paths(self):
files = []
model = self.ui_files.model()
for index in range(model.rowCount()):
item = model.item(index)
if item.checkState() == QtCore.Qt.Checked:
files.append(item.text())
return files
def merge_files(self, files=[]):
print files
def merge_clicked(self):
files = self.collect_paths()
print files
def main():
app = QtGui.QApplication(sys.argv)
ex = MegaMergeWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
最佳答案
在 Qt4 中没有信号表明 QCheckBox
是否被选中 QAbstractItemView
,只是在 Qt5 中 dataChanged
信号被修改为发送被修改的角色,因此区分检查是否被更改。
在 Qt4 中,有几种方法可以创建该信号,一种方法是使用委托(delegate)来跟踪该角色的变化,如下所示:
class StyledItemDelegate(QtGui.QStyledItemDelegate):
checked = QtCore.Signal(QtCore.QModelIndex, int)
def editorEvent(self, event, model, option, index):
if model.flags(index) & QtCore.Qt.ItemIsUserCheckable:
# before the change
last_value = index.data(QtCore.Qt.CheckStateRole)
value = QtGui.QStyledItemDelegate.editorEvent(self, event, model, option, index)
if model.flags(index) & QtCore.Qt.ItemIsUserCheckable:
# after the change
new_value = index.data(QtCore.Qt.CheckStateRole)
if last_value != new_value:
self.checked.emit(index, new_value)
return value
class MegaMergeWindow(QtGui.QMainWindow):
def __init__(self, *args, **kwargs):
[...]
# controls
self.ui_files = QtGui.QListView()
self.ui_files.setModel(QtGui.QStandardItemModel())
self.ui_files.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
delegate = StyledItemDelegate()
delegate.checked.connect(self.on_checked)
self.ui_files.setItemDelegate(delegate)
[...]
def on_checked(self, index, state):
text = "Checked" if state == QtCore.Qt.Checked else "UnChecked"
item = self.ui_files.model().itemFromIndex(index)
print(item, item.data())
print(index, index.data())
print(state)
print(text)
关于python - 当 QListview 项的复选框更改时发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49113983/
我想从一个 QListView 实现拖放功能到另一个。拖放操作会将拖动项目的文本复制到另一个 QListView .我希望拖放是单向的,我的意思是仅来自 QListView A转QListView B
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * class Widget(QWidget): def _
我有一个关于当模型对象在外部发生变化时更新 QTreeView(或 QAbstractItemView 的任何子类)的简单问题。假设一个列表显示了 QAbstractItemModel 的一个子类,并
我有一个 QListView 其中有 5 个项目。在我的 QListView 中说(美国、加拿大、丹麦、埃及、芬兰)。现在我想设置一个通用的 所有这些项目的标题为国家 .如何将标题设置为 QListV
我试图按名称、创建日期和上次访问日期(所有升序和降序)对 QFileSystemModel 进行排序。我使用 QSortFilterProxyModel 进行排序。更改排序顺序时不知何故有一个奇怪的效
当鼠标悬停在特定的 ListView 项上时,我想做一些事情。我尝试了 enter(QModelIndex) 信号,但是当光标移动到项目上时它似乎没有发出(即使当光标移动到项目上时它们会突出显示)。是
我正在尝试向 Qt QListView 添加上下文(右键单击)菜单。我在 Qt 3.3 中看到有“contextMenuRequested”(我可以使用) - http://doc.qt.digia.
我正在使用 QListView显示我可以拖放以更改其顺序的项目列表。 问题在于: 下降指示器只是一条非常小的线(1px 粗) 掉落区域非常狭窄,因此需要非常准确才能在其他两个元素之间正确放置元素。 我
当 QListView 中没有项目时,我想显示一些文本(例如“无项目”)。 我尝试重写QListView的paintEvent方法,但没有任何效果。 最佳答案 下面的代码显示了一种通过重载 View
需要在带有图标和复选框的 QListView 中按给定路径列出目录,然后将标记文件夹的名称传输到程序。对于列表目录,我使用代码: #include #include #include i
作为我上一篇文章的另一个问题的延伸。拥有QListView,可以保存和恢复QListview中项目的选择。恢复后所选项目的索引无法正确打印。 使用currentchange - slot方法更改索引,
我正在尝试将独占复选框作为 QListView 项目。我使用 QStandardItemModel 作为带有 QStandardItem 的模型。 我正在向列表中动态添加项目并将其设置为可检查: QS
我正在尝试编写一个 QListView 模型并将其链接到我的主 UI(来自 Qt Designer) 这是我的主要功能: #include "notepad.h" #include int main
我使用 QListView(在 PyQt5 中)来显示字符串。我想让该列表中每个项目的背景颜色在两种颜色之间变化,以使其更易于阅读。 我试过 Qt.DecorationRole 但这只会在每个项目的左
我不明白为什么我的 QListView 小部件不显示滚动条,或者有时将它们显示为黑色。我无法滚动,即使使用向上/向下键也无法滚动。 这是它的样子 这是小部件的 ui 部分
我开发了一个带有复选框的简单对话框,允许用户从列表中选择一个或多个项目。除了标准的确定和取消按钮外,它还添加了全选和取消全选按钮,允许用户一次选中/取消选中所有项目(这对于大型列表很方便)。 impo
我实现了一个继承 QListView 的新类,现在我想修改 sizeHint() 来计算我的新列表查看器的最佳宽度。 首先想到的是连接模型的插入,检索最大长度,但是怎么做呢?或者有更好的建议吗? 非常
我希望用 pyqt4 制作一个小 GUI,逐行显示“dir c:\windows\”的输出我正在寻找 QlistView 但我不明白该怎么做。谁能帮我吗? 最佳答案 import os for roo
总的来说,我对 PyQT 和 QT 还是(非常)陌生,必须快速设计一个与现代 2 Pane 邮件应用程序大致相似的用户界面:左边是邮件列表,右边是编辑器。我想提供更多的信息,而不仅仅是要在 QList
我有一个带有字符串列表的 QListView。 基本上,我将它用作自动完成过程的 QLineEdit 的弹出窗口。我不希望 QListView 显示空白行,只显示其中包含字符串的行。看到这个: 我希望
我是一名优秀的程序员,十分优秀!