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に関するドキュメントを読んで行を追加し、そのスロットでリフレッシュしてください。スロットは任意のオブジェクトのメソッド(あなたの場合はdef)にすることができます。 – webbi