Когда я запускаю это в Python 3.5 и PyQt5, он отлично работает, он печатает правильные режимы и отмеченные элементы. Я удалил строки для чтения / записи файлов для тестирования. Для PyQt4 и Python 2.7 вам просто нужно исправить пару импортных операций и инструкцию печати. Запустите его, отметьте пару элементов, и через 5 секунд что вы видите на консоли?
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QWizardPage, QListView
class AppRemovalPage(QWizardPage):
def __init__( self, parent ):
super(AppRemovalPage, self).__init__(parent)
self.setTitle('Apps to Remove')
self.setSubTitle('Listview')
self.list_view = QListView(self)
self.list_view.setMinimumSize(465, 200)
self.isWritten = False
loo = "/home/test1/file.txt"
self.model = QtGui.QStandardItemModel(self.list_view)
for line in ('a', 'b', 'c', 'd', 'e'):
self.item = QtGui.QStandardItem(line)
self.item.setCheckable(True)
self.item.setCheckState(QtCore.Qt.Unchecked)
self.model.appendRow(self.item)
self.list_view.setModel(self.model)
self.list_view.show()
def print_checked_items(self):
for index in range(self.model.rowCount()):
item = self.model.item(index)
if item.checkState() == QtCore.Qt.Checked:
if self.isWritten:
mode = "a"
else:
mode = "w"
self.isWritten = True
print ('%s' % item.text())
print("print checked items executed")
app = QApplication([])
listview = AppRemovalPage(None)
listview.show()
QTimer.singleShot(5000, listview.print_checked_items)
app.exec_()
Если у меня есть галочка a, c и d, я вижу следующее:
a w
c a
d a
print checked items executed
Обновить, чтобы показать, как работает файловый объект Python (и на самом деле это лучший код, потому что он поддерживает использование управления контекстом):
def print_checked_items(self):
path = "checked.txt"
mode = 'a' if self.isWritten else 'w'
if len(self.items) > 0:
with open(path, mode) as file:
for item in self.items:
print('%s' % item.text())
file.write(item.text() + "\n")
file.close()
print("print checked items executed")
Соединение можно записать wizard.button(QWizard.NextButton).clicked.connect(appremoval.print_checked_items)