나는 내가 그것을이 작업을 수행 할 수 있도록의 일부 목록에 액세스 할 수 있어야하는 QListWidgetItem로 QListWidget에 삽입는 QWidget을 얻을 수있는 방법을 알아 내려고 노력하고있어 내부 위젯에서 QListWidgetItem에 접근 다음PyQt4는
- 증가/목록에서 위치의 감소
- 는 메인 클래스
내 스크립트 layo의 함수에 자신의 클래스에서 목록에서
예 :
관련 코드 단편 :
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
creature_initiative_object.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)
creature_initiative_object.py가
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)
항목은 아직 통과되지 않고있는 InitCreatureObject 클래스에 추가 다음 한 추가했다. 부모 개체는 옳은 것처럼 보이지만 행을 가져 오면 항상 -1이 표시됩니다.
더 나은 설명 , 위젯 (InitCreatureObject)을 가져오고, 컨텍스트를 설명하고, 원하는 목록에서 그 위치로 할 때 또는 어떤 이벤트를 실현할 때 – eyllanesc
@eyllanesc 메인 포스트에 추가하여 좀 더 명확히하기 위해 추가했습니다. 매우 틈새 문제이므로 설명하기가 어렵습니다. – Aaranos
다음 줄'self.mainwidget = main.MainWindow() self.btnRemove.clicked.connect (self.mainwidget.RemoveItem)'이 새 창을 만들고 있는데, main.py 파일에 내 논리를 구현하는 것이 좋습니다 – eyllanesc