1

私はPythonを学び、父を助けるためのプログラムを書こうとしています。私はそれをExcelのようにしたいと思っており、今のところ見栄えがしますが、誰かがクロールダウンしている間にtableWidgetの行(列ではなく)の数を増やす方法がわかりません... QtDesignerまたは私は.pyファイルにコードを書く必要がありますか?どんな助けでもありがたいです...私がばかげた質問をしているなら申し訳ありませんが、私は本当に初心者です...

4

1 に答える 1

1

以下は、概念実証の例のようなものです。

class Widget(QtGui.QWidget):
    def __init__(self):
        super(Widget, self).__init__()
        self.resize(600,400)

        layout = QtGui.QVBoxLayout(self)
        self.table = QtGui.QTableWidget(20,10)
        self.vBar = self.table.verticalScrollBar()
        self._vBar_lastVal = self.vBar.value()

        layout.addWidget(self.table)

        self.vBar.valueChanged.connect(self.scrollbarChanged)

    def scrollbarChanged(self, val):
        bar = self.vBar
        minVal, maxVal = bar.minimum(), bar.maximum()
        avg = (minVal+maxVal)/2
        rowCount = self.table.rowCount()

        # scrolling down
        if val > self._vBar_lastVal and val >= avg:
            self.table.insertRow(rowCount)

        # scrolling up
        elif val < self._vBar_lastVal:
            lastRow = rowCount-1
            empty = True
            for col in xrange(self.table.columnCount()):
                item = self.table.item(lastRow, col)
                if item and item.text():
                    empty=False
                    break
            if empty:
                self.table.removeRow(lastRow)

        self._vBar_lastVal = val

テーブル ウィジェットの垂直スクロール バーに依存して、値の変化に関する情報を通知する必要があります。valueChanged(int)そのため、その信号をメソッドに接続します。

SLOT はスクロールバーのscrollbarChanged値を受け取ります。ここで行っているのは、その時点でのスクロールバーの最小値と最大値をチェックし、現在の位置が少なくとも中央にあるかどうかを確認することです。また、ダウン スクロールでのみ行を追加する必要があるため、現在のスクロール バーの値が前回よりも大きいかどうかも確認します。これらの条件が真の場合、新しい行を挿入します。

最後の行をチェックして空であることを確認し、そうである場合にのみ削除する必要があると確信しているため、縮小する操作はもう少し複雑です。私のバージョンでは大まかなアイデアが得られますが、数学ロジックにはおそらくさらに作業が必要になるでしょう。しかし、それがしていることは、最後の行のすべての項目を調べて、その値が None か空の値かを確認することです。行全体が空の場合は、それを削除します。したがって、上にスクロールすると縮小効果が得られます。

これが出発点になることを願っています!パーツの詳細な説明が必要な場合は、コードについてお気軽にお問い合わせください。

于 2012-07-08T05:30:26.347 に答える