QtexteditのようにQtableviewで自動スクロールを有効にする方法は?

アナンド

QtableViewとQStandardItemModelを使用してGUIにログを表示し、適切な間隔を維持してログをフィルタリングしています。モデルを作成し、それにデータを挿入しました。フィルタ文字列にQSortFilterProxyModelを使用しました。

self.tableView = QtGui.QTableView(self)
self.model = QtGui.QStandardItemModel(self)
self.proxy = QtGui.QSortFilterProxyModel(self)
self.proxy.setSourceModel(self.model)
self.tableView.setModel(self.proxy)

1秒で、100近くのログが予想され、GUIに表示されます。新しいログが追加されると、ビューは自動スクロールではなく、スライダーは上部にのみ表示されます。ロギングのライブ感はなく、ユーザーは手動で最後までスクロールする必要があります。したがって、これを克服するために、次の構文を使用しました。

self.model.rowsInserted.connect(lambda: QtCore.QTimer.singleShot(5, self.tableView.scrollToBottom))

ログのライブ感を与えますが、スライダーは常に下にあり、上にスクロールして前のログを表示することはできません。スライダーを動かそうとすると、すぐに再び下に下がります。したがって、この構文は私の要件を満たしていません。QTextEditでは、自動スクロールは適切でユーザーフレンドリーです。ここQtableViewで同じシナリオが必要です。QTextEditに似た自動スクロールの代替手段はありますか?

エクモロ

必要な動作を取得するには、前のスクロール位置が一番下にある場合にのみ自動スクロールできます。そうすれば、ユーザーが下からスクロールするたびに、自動スクロールが無効になります。ただし、下にスクロールして戻ると、自動スクロールが再び有効になります。(注:自動スクロールをすばやく再度有効にするには、スクロールバーを右クリックして、コンテキストメニューから[下]を選択します)。

これが簡単なデモです:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.table = QtGui.QTableView(self)
        self.model = QtGui.QStandardItemModel(self)
        self.table.setModel(self.model)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.table)
        self._scroll = True
        self.model.rowsAboutToBeInserted.connect(self.beforeInsert)
        self.model.rowsInserted.connect(self.afterInsert)

    def beforeInsert(self):
        vbar = self.table.verticalScrollBar()
        self._scroll = vbar.value() == vbar.maximum()

    def afterInsert(self):
        if self._scroll:
            self.table.scrollToBottom()

    def addRow(self):
        self.model.appendRow([QtGui.QStandardItem(c) for c in 'ABC'])

if __name__ == '__main__':

    app = QtGui.QApplication([''])
    window = Window()
    window.setGeometry(500, 50, 400, 300)
    window.show()
    timer = QtCore.QTimer()
    timer.timeout.connect(window.addRow)
    timer.start(200)
    app.exec_()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

QTextEditのテキストを自動的にスクロールする方法(アニメーション効果)?

分類Dev

PyQt4でQtGui.QTextEditの自動スクロールを設定するにはどうすればよいですか?

分類Dev

プレタグのスクロールを自動的に無効および有効にする方法

分類Dev

Spring Shellコンソール出力で自動水平および垂直スクロールを有効にするにはどうすればよいですか?

分類Dev

Visual StudioCodeで自動スクロールを有効にする

分類Dev

出力でurxvt自動スクロールを無効にする方法は?

分類Dev

twig.jsで自動エスケープをグローバルに有効にする方法は?

分類Dev

UITextViewの「自動スクロール」を解決するにはどうすればよいですか?

分類Dev

onFocusの自動スクロール距離を調整するにはどうすればよいですか?

分類Dev

gnomeターミナルで自動スクロールを無効にするにはどうすればよいですか?

分類Dev

gnomeターミナルで自動スクロールを無効にするにはどうすればよいですか?

分類Dev

recyclerview内でgrideviewのスクロールを有効にするにはどうすればよいですか?

分類Dev

ページを自動的に下にスクロールするにはどうすればよいですか?

分類Dev

ListFragmentの高速スクロールを有効にするにはどうすればよいですか?

分類Dev

AndroidStudioでFlutterプロジェクトの自動フォーマットを有効にする方法は?

分類Dev

マクロなしでセルに入力できるようにしながら自動スクロールを無効にする(Excel)

分類Dev

プロセスの実行中にWSLで「ターミナルウィンドウの下部への自動スクロール」を無効にするにはどうすればよいですか?

分類Dev

EclipseでJavaFXクラスの自動インポートを有効にする方法は?

分類Dev

QTableViewの特定の行にスクロールするにはどうすればよいですか?

分類Dev

Windows 10がロック画面に自動的に入らないようにする方法(スリープはすでに無効になっています)

分類Dev

VoiceOverによるUICollectionViewの自動スクロールを防ぐ方法は?

分類Dev

矢印キーでスクロールを有効にするにはどうすればよいですか?

分類Dev

スクロールバーが一番下に移動した後、ボタンを有効にするにはどうすればよいですか?

分類Dev

スクロールバーが一番下に移動した後、ボタンを有効にするにはどうすればよいですか?

分類Dev

クラムAVの自動/スケジュールスキャンのログはどのように有効になっていますか?

分類Dev

クラムAVの自動/スケジュールスキャンのログはどのように有効になっていますか?

分類Dev

xfce4で自然スクロールを有効にするにはどうすればよいですか?

分類Dev

xfce4で自然スクロールを有効にするにはどうすればよいですか?

分類Dev

JScrollPaneでスクロールを有効にするにはどうすればよいですか?

Related 関連記事

  1. 1

    QTextEditのテキストを自動的にスクロールする方法(アニメーション効果)?

  2. 2

    PyQt4でQtGui.QTextEditの自動スクロールを設定するにはどうすればよいですか?

  3. 3

    プレタグのスクロールを自動的に無効および有効にする方法

  4. 4

    Spring Shellコンソール出力で自動水平および垂直スクロールを有効にするにはどうすればよいですか?

  5. 5

    Visual StudioCodeで自動スクロールを有効にする

  6. 6

    出力でurxvt自動スクロールを無効にする方法は?

  7. 7

    twig.jsで自動エスケープをグローバルに有効にする方法は?

  8. 8

    UITextViewの「自動スクロール」を解決するにはどうすればよいですか?

  9. 9

    onFocusの自動スクロール距離を調整するにはどうすればよいですか?

  10. 10

    gnomeターミナルで自動スクロールを無効にするにはどうすればよいですか?

  11. 11

    gnomeターミナルで自動スクロールを無効にするにはどうすればよいですか?

  12. 12

    recyclerview内でgrideviewのスクロールを有効にするにはどうすればよいですか?

  13. 13

    ページを自動的に下にスクロールするにはどうすればよいですか?

  14. 14

    ListFragmentの高速スクロールを有効にするにはどうすればよいですか?

  15. 15

    AndroidStudioでFlutterプロジェクトの自動フォーマットを有効にする方法は?

  16. 16

    マクロなしでセルに入力できるようにしながら自動スクロールを無効にする(Excel)

  17. 17

    プロセスの実行中にWSLで「ターミナルウィンドウの下部への自動スクロール」を無効にするにはどうすればよいですか?

  18. 18

    EclipseでJavaFXクラスの自動インポートを有効にする方法は?

  19. 19

    QTableViewの特定の行にスクロールするにはどうすればよいですか?

  20. 20

    Windows 10がロック画面に自動的に入らないようにする方法(スリープはすでに無効になっています)

  21. 21

    VoiceOverによるUICollectionViewの自動スクロールを防ぐ方法は?

  22. 22

    矢印キーでスクロールを有効にするにはどうすればよいですか?

  23. 23

    スクロールバーが一番下に移動した後、ボタンを有効にするにはどうすればよいですか?

  24. 24

    スクロールバーが一番下に移動した後、ボタンを有効にするにはどうすればよいですか?

  25. 25

    クラムAVの自動/スケジュールスキャンのログはどのように有効になっていますか?

  26. 26

    クラムAVの自動/スケジュールスキャンのログはどのように有効になっていますか?

  27. 27

    xfce4で自然スクロールを有効にするにはどうすればよいですか?

  28. 28

    xfce4で自然スクロールを有効にするにはどうすればよいですか?

  29. 29

    JScrollPaneでスクロールを有効にするにはどうすればよいですか?

ホットタグ

アーカイブ