A QPushButton установлен как 'Проверяемый'. Когда переключается, класс bool изменяется.
Этот измененный bool позволяет продолжить метод в другом классе, и после завершения этого внешнего метода мне нужно вернуть кнопку в исходное состояние «setChecked (False)».(PyQt) Снимите отметку с кнопки со стороны кнопки?
В то время как я могу вернуть класс, помещенный в bool, в состояние по умолчанию в конце этого внешнего метода, я не могу получить внешний доступ к методу, который отжимает кнопку.
Я предполагаю, что это связано с аргументами в классах init, но это необходимо - и мне интересно, есть ли другое средство для достижения описанного рабочего процесса.
код Связанные ножницы ниже:
(команда в вопросе отличается в нижней части 'класса 2')
Класс 1:
class shapeCSVeditor(QtGui.QDialog, QtGui.QWidget):
valueShare = []
rowOverride = False# <<=== equivalent to 'override' in 'Class 2'
def __init__(self, iface, fileName, editorType, parent=None):
super(shapeCSVeditor, self).__init__(parent)
self.iface = iface
self.editorType = editorType
self.fileName = filename
self.pushButtonSetBase = QtGui.QPushButton(self)
self.pushButtonSetBase.setText("Set Base Shape")
self.pushButtonSetBase.setCheckable(True)
self.pushButtonSetBase.toggled.connect(self.on_pushButtonSetBase_toggled)
self.layoutHorizontal.addWidget(self.pushButtonSetBase)
#some other things here...
@QtCore.pyqtSlot()
def on_pushButtonSetBase_toggled(self):
shapeCSVeditor.rowOverride = True
pass
def on_BaseRow_Changed(self):
self.pushButtonSetBase.setChecked(False)
return
Класс 2:
class CSVModel(QtCore.QAbstractTableModel):
# Establish inital settings and branch processes
def __init__(self, iface, fileName, editorType, parent=None):
super(CSVModel,self).__init__()
self.propertiesFile = r'some file'
self.areaStressFile = r'some other file'
self.iface = iface
self.rows = []
self.editorType = editorType
self.loadCSV()
self.iface.mapCanvas().selectionChanged.connect(self.addRow)
# add rows to the TableView based on object selection(s) in Qgis.mapCanvas
def addRow(self):
override = shapeCSVeditor.rowOverride
selectedFeatures = selectedLayer.selectedFeatures()
if override:
for feature in selectedFeatures:
self.rows.pop(0)
feat_Attributes = []
feat_Attributes.extend([self.iface.activeLayer().name()+'_'+str(feature.id())])
feat_Attributes.extend(['',]*(len(self.header)-1))
self.beginResetModel()
self.rows.insert(0,feat_Attributes)
shapeCSVeditor.rowOverride = False
self.endResetModel()
shapeCSVeditor.on_BaseRow_Changed# <<<=== wrong-diddily!
break
PS - если в формулу «shapeCSVeditor() добавлены скобки» 3 аргумента необходимы, как указано в классе Button, и если скобки добавлены в «on_BaseRow_Changed», то возвращается;
TypeError: unbound method on_BaseRow_Changed() must be called with shapeCSVeditor instance as first argument (got nothing instead)
Ваш совет помогает, спасибо. Я обновил исходный вопрос, чтобы надеяться на помощь в решении. – Katalpa
Я не думаю, что проблема в классе 1, но в классе 2. Не могли бы вы добавить код, в котором вы создаете объект 'shapeCSVeditor'? – Plouff
Обновлено: На данный момент я не создаю объект shapeCSVeditor явно ... – Katalpa