- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力让拖放工作。我希望能够从 QPushButton 拖放到 QTableView 的单元格中。我在网上看了一些教程,但似乎卡在了第一步。下面的例子是从惊人的 zetcode 教程改过来的:
http://zetcode.com/tutorials/pyqt4/dragdrop/
使用下面的代码,当我将按钮拖到 tableWidget 中时,似乎调用了 dragEnterEvent,但是一旦我将鼠标悬停在表格上,我就会得到那个符号,我不允许将其放在表格上,所以永远不能进入 drop 事件 :(
我不得不承认我对 pyqt 还很陌生,所以可能会遗漏一些非常简单的东西。非常感谢我能得到的任何帮助!
干杯
戴夫
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Button(QtGui.QPushButton):
def __init__(self, title, parent):
super(Button, self).__init__(title, parent)
def mouseMoveEvent(self, e):
if e.buttons() != QtCore.Qt.RightButton:
return
mimeData = QtCore.QMimeData()
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(e.pos() - self.rect().topLeft())
dropAction = drag.start(QtCore.Qt.MoveAction)
def mousePressEvent(self, e):
QtGui.QPushButton.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print 'press'
class MyTable(QtGui.QTableWidget):
def __init__(self, rows, columns, parent):
super(MyTable, self).__init__(rows, columns, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
print e.accept()
def dropEvent(self, e):
print 'blah'
position = e.pos()
self.button.move(position)
e.setDropAction(QtCore.Qt.MoveAction)
e.accept()
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.setAcceptDrops(True)
self.button = Button('Button', self)
self.table = MyTable(2,2,self)
self.table.setAcceptDrops(True)
self.table.setDragEnabled(True)
self.setWindowTitle('Click or Move')
self.setGeometry(300, 300, 280, 150)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.table)
self.setLayout(layout)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
if __name__ == '__main__':
main()
最佳答案
因为您是在 QTableWidget 上设置拖放,所以您还需要重新实现它的 dragMoveEvent
.根据 docs here :
Subclassing Complex Widgets
Certain standard Qt widgets provide their own support for drag and drop. When subclassing these widgets, it may be necessary to reimplement dragMoveEvent() in addition to dragEnterEvent() and dropEvent() to prevent the base class from providing default drag and drop handling, and to handle any special cases you are interested in.
class MyTable(QtGui.QTableWidget):
...
def dragMoveEvent(self, e):
e.accept()
self.button.move(position)
不会按预期工作。虽然
dropEvent
应该正确触发,并且当它悬停在单元格上时,你应该得到“已接受”的拖动图标。
关于drag-and-drop - 如何拖放到 QTableWidget 中? (PyQT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264040/
有谁知道的返回值之间的关系 QTableWidget::item(x, y) 和 QTableWidget::cellWidget (x, y) 在同一个 QTableWidget 和同一个 row
当我将按钮拖放到 QTableWidget 中时,按钮会从旧位置消失,并且我放置按钮的单元格中不会显示任何内容。 有人可以提出问题是什么吗? 请在下面找到代码 import sys from PyQt
我有一个 QTableWidget,我想在其中填充另一个 QTableWidget 的字段。 这是它的样子: -------------------------- Name | Class | Sec
我问了一个与此非常相似的问题,但回答者提供了少量帮助,我无法解决我的问题。我想我会重新问这个问题,因为没有其他人回答我的问题。我想知道如何将 QTableWidget 的数据从一个窗口复制到另一个窗口
我的程序遇到了一个问题,我不知道如何解决。问题是我在两个类中有一个Qtablewidget,我使用信号和槽机制来传输一个QVector,它包含一个类的QTablewidgetItems,并将它放在其他
我有一个问题:调用 QTableWidget::update 不会导致 QTableWidget::paintEvent。 简要说明:- QTableWidgetEx - 派生自 QTableWidg
我正在使用 QTableWidget,当用户单击特定行时,我使用该索引来执行某些操作。我还使用 setSortEnable 启用了排序,所以当我通过单击标题对其进行排序时,所有行索引都会更改,但我想要
假设我有一个充满数据的二维数组,比如 10 x 10。内容以及行数可以随时更改。 现在我想在 QTableWidget 中显示这些数据。 我使用超时 1 秒的计时器来刷新表格内容。在超时槽中,如果我使
QTableWidget 有搜索用户数据行的方法吗? 类似的东西: //set user data row->setData(0, Qt::UserRole, "ID001"); //find row
我使用 UI 编辑器创建 QTableWidget。 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:
QTableWdiget对于简单的网格显示来说非常棒。更改颜色、字体等非常简单。 但是,我没有设法用更少的垂直空白来使网格看起来更“紧密”。我看到 Qt 文档讨论了(例如 here ) margin
可以为单元格设置占位符吗?我认为它可以通过为特定单元格设置 QLineEdit 来实现,但可能是 QTableWidget,或者 QTableWidgetItem 可以在没有自定义小部件的情况下做到这
当按下堆叠在左侧的按钮选择了 QTableWidget 中的整行时,是否有信号?我希望启用某些功能,但不确定如何启用? 提前致谢! 最佳答案 您有几个不同的选择。您所要求的最直接的方法是使用 QHea
在下面的代码中有两个样式表:problemStylesheet 和 okStylesheet。当我为 QTableWidget 使用 okStylesheet 时一切正常。标签在滚动。问题是如果我使用
QTableWidget由多个Selection Modi组成,可以通过方法进行选择 setSelectionMode (QAbstractItemView::SelectionMode mode)
我正在尝试使用最新的 Qt SDK (4.7.4) 来设置 QTableWidget 的样式。通过谷歌搜索,我发现我需要做这样的事情: QHeaderView::section { backg
我有一个 QTableWidget,我通过标题列使用它的默认排序功能,但我在 QTableWidget 中的一列是整数类型,并且通过 QTableWidget 默认排序它像字符串一样排序。所以有任何方
我有一个带有自定义小部件的 QTableWidget。这些小部件很大,几乎填满了整个滚动区域的高度,因此只有一行是可见的。 我可以用鼠标滚轮或拖动滚动条滚动,但行总是跳动。 有没有办法让QTableW
我尝试了 .setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) ,效果很好,但需要用户将鼠标移动到滚动条并使用它来体验平
我有一个带有自定义小部件的 QTableWidget。这些小部件很大,几乎填满了整个滚动区域的高度,因此只有一行是可见的。 我可以用鼠标滚轮或拖动滚动条滚动,但行总是跳动。 有没有办法让QTableW
我是一名优秀的程序员,十分优秀!