我正在试图弄清楚如何使作为QListWidgetItem插入QListWidget的QWidget能够访问它所属的列表,以便它可以执行以下操作:
我的脚本布局是main.py,它是MainWindow类所在的位置。MainWindow使用从主ui文件生成的类。我还有一个自定义小部件,它是它自己的类
GUI示例:
相关代码片段:
main.py
from PyQt4.QtGui import QMainWindow, QApplication
from dungeonjournal import Ui_MainWindow
from creature_initiative_object import InitCreatureObject
from os import walk
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(QMainWindow, self).__init__(parent)
self.setupUi(self)
etc......
def AddToInitiative(self):
creature = self.comboBoxSelectCharacter.currentText()
if(creature):
creatureInfo = ''
with open("creatures/"+str(creature)+".creature", "r") as f:
creatureInfo = f.read()
creatureInfo = creatureInfo.split("|")
customWidget = InitCreatureObject()
customWidgetItem = QtGui.QListWidgetItem(self.initiativeList)
customWidgetItem.setSizeHint(QtCore.QSize(400,50))
self.initiativeList.addItem(customWidgetItem)
self.initiativeList.setItemWidget(customWidgetItem, customWidget)
customWidget.setName(creatureInfo[0])
return
生物_主动_对象.py
class Ui_InitCreatureObject(object):
def setupUi(self, InitCreatureObject):
etc...
class InitCreatureObject(QtGui.QWidget, Ui_InitCreatureObject):
def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()):
QtGui.QWidget.__init__(self, parent, f)
self.setupUi(self)
编辑1: 为了再次澄清,我需要能够使用小部件中的按钮来修改其在列表中的位置。该列表是主ui的一部分。“向上箭头”、“向下箭头”、“选择”和“删除”按钮是我试图与他们的类外事物进行交互的按钮
他们调用的函数需要能够确定调用哪个listItem,并且能够修改列表
例如,如果单击“删除”,则需要知道要删除列表中的哪个项目。因此,它首先需要知道列表是什么,然后需要知道它是什么项目。我不确定如何访问占用该列表项的小部件实例。我也不知道如何从listitem的类中基于按钮按下来获取listitem
编辑2: 根据第一个答案,我试图将其应用到我的代码中
main.py添加了以下函数
def RemoveItem(self):
cwidget = self.sender().parent()
item = self.initiativeList.itemAt(cwidget.pos())
row = self.initiativeList.row(item)
self.initiativeList.takeItem(row)
print(row)
Creative_initiative_object.py已将以下内容添加到InitCreatureObject类中
class InitCreatureObject(QtGui.QWidget, Ui_InitCreatureObject):
def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()):
QtGui.QWidget.__init__(self, parent, f)
self.setupUi(self)
self.mainwidget = main.MainWindow()
self.btnRemove.clicked.connect(self.mainwidget.RemoveItem)
项目仍未通过。父对象似乎是正确的,但当我得到行时,它总是说-1
获取
QTableWidgetItem
的策略是使用itemAt()
方法,但为此,您必须知道QTableWidgetItem
中某个点的位置由于主要目标是在发送信号时获取项目,因此使用连接的插槽,因此我建议将所有信号连接到该插槽。鉴于上述情况,采取以下步骤:
sender()
发射信号的对象李>parent()
,因为这将是随项目一起添加到QListWidget()
的自定义小部件李>pos()
获取自定义小部件的位置,这是应该在itemAt()
方法中使用的位置李>可以按如下方式实现上述功能:
根据上述内容,提出以下示例:
就你而言:
相关问题 更多 >
编程相关推荐