【问题标题】:Drag & Drop in KListWidget (PyQt/PyKde programming)在 KListWidget 中拖放(PyQt/PyKde 编程)
【发布时间】:2010-10-22 03:21:19
【问题描述】:

我正在 PyQt/PyKde 中开发一个小应用程序(准确地说是 KDE4 plasmoid)。

在我的应用程序中,我有一个 KListWidget 填充了一些行,请参见这张图片:

http://img212.imageshack.us/img212/8444/sshot3.jpg

我需要为列表行实现拖放操作,例如我应该能够将任何文件放在一行上,然后应用程序会将这个文件发送到列表中的名称。

这个列表是由这个sn-p代码创建的:

self.contactsList = KListWidget()
self.contactsList.setFrameShape(QFrame.StyledPanel)
self.contactsList.setFrameShadow(QFrame.Sunken)
self.contactsList.setIconSize(QSize(35, 35));

拖放发生时调用的方法已经实现,我只需将方法连接到列表,方法类似于:

self.connect(self.contactsList, SIGNAL("signal_()"), self.method)

任何帮助将不胜感激

【问题讨论】:

  • 您能否澄清一下已经实施的具体内容?另外,你想用什么方法“连接”到列表?您是指 Qt 信号/插槽连接吗?

标签: drag-and-drop pyqt pykde plasmoid


【解决方案1】:

PyQt信号可以动态定义,只要定义self.contacts_list_method()的类继承自QWidget,就可以发出动态信号。

例如,在联系人列表对象中处理您的列表附加代码的方法的末尾:

def contacts_list_method(self, someparameters):
  doStuff()
  doMoreStuff()
  ...
  self.emit(QtCore.SIGNAL("contacts_list_method_done()"))

然后在包含 contactsList 对象的类的初始化程序中(或任何您认为更好的地方)放置以下连接:

self.connect(self.contactsList, SIGNAL("contacts_list_method_done()"), self.method)

您还可以将 QtCore.SIGNAL("contacts_list_method_done()") 预定义为一个对象,然后在您在 contacts_list_method 中发出它时引用该对象。

【讨论】:

  • 这种方式行不通,但我已经使用 qtreewidget 而不是 klistw 解决了
  • 您应该发布您实际所做的作为答案并将其选为正确答案(除非它显然是公司机密代码),这样每个人都可以受益。我想很多人会在某个时候想要你描述的行为:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2012-05-03
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多