3
저는 PyQt4를 사용하여 매우 간단한 로그 뷰어를 Python으로 구현했습니다.파일보기를 사용하여 PyQt4를 사용하여 로그 뷰어 새로 고침
나는 프로그램의 실행을 따르기 위해이 프로그램을 사용하고 싶다. 따라서 로그 파일에 새로운 라인이 추가 될 때리스트보기가 새로 고쳐 져야한다. 여기
은 (시계없이) 내 구현 : 내용 분석, 파일을 열 (' : '
에서 분할을하고 목록을 작성) 및 표시 :
제시된
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class LogEntryModel(QAbstractListModel):
def __init__(self, logfile, parent=None):
super(LogEntryModel, self).__init__(parent)
self.slurp(logfile)
def rowCount(self, parent=QModelIndex()):
return len(self.entries)
def data(self, index, role):
if index.isValid() and role == Qt.DisplayRole:
return QVariant(self.entries[index.row()])
else:
return QVariant()
def slurp(self, logfile):
self.entries = []
with open(logfile, 'rb') as fp:
for line in fp.readlines():
tokens = line.strip().split(' : ')
sender = tokens[2]
message = tokens[4]
entry = "%s %s" % (sender, message)
self.entries.append(entry)
class LogViewerForm(QDialog):
def __init__(self, logfile, parent=None):
super(LogViewerForm, self).__init__(parent)
# build the list widget
list_label = QLabel(QString("<strong>MoMo</strong> Log Viewer"))
list_model = LogEntryModel(logfile)
self.list_view = QListView()
self.list_view.setModel(list_model)
list_label.setBuddy(self.list_view)
# define the layout
layout = QVBoxLayout()
layout.addWidget(list_label)
layout.addWidget(self.list_view)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = LogViewerForm(sys.argv[1])
form.show()
app.exec_()
, 응용 프로그램이 예상대로 작동 목록은 QListView
입니다.
는 fileChanged
신호를 방출하는 QFileSystemWatcher
클래스가있다,하지만 난 어떻게 데이터에 행을 추가하고보기 이벤트를 새로 고침 트리거하는 곳을 connect
하는 방법을 알고하지 않습니다.
어떤 도움이 필요합니까?
감사합니다.
저는 Qt C++ 라이브러리를 사용했습니다. QFileSystemWatcher 신호를 원하는 슬롯에 연결해야한다고 말하면 파일이 변경 될 때 호출됩니다. 나중에 QListView에 관한 문서를 읽고 행을 추가하고 해당 슬롯에서 새로 고침합니다. 슬롯은 모든 객체의 메소드가 될 수 있음을 기억하십시오. – webbi